Skip to content

Commit 6973fbb

Browse files
author
古映杰
committed
add reorder
1 parent 82de010 commit 6973fbb

7 files changed

Lines changed: 54 additions & 73 deletions

File tree

dist/react-lite.common.js

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -333,19 +333,15 @@ var pipe = function pipe(fn1, fn2) {
333333
};
334334

335335
var flattenChildren = function flattenChildren(list, iteratee, a, b) {
336-
return flat(list, iteratee, 0, a, b);
337-
};
338-
339-
var flat = function flat(list, iteratee, index, a, b) {
340336
var len = list.length;
341337
var i = -1;
342338

343339
while (len--) {
344340
var item = list[++i];
345341
if (isArr(item)) {
346-
index = flat(item, iteratee, index, a, b);
342+
flattenChildren(item, iteratee, a, b);
347343
} else {
348-
iteratee(item, index++, a, b);
344+
iteratee(item, a, b);
349345
}
350346
}
351347
};
@@ -650,14 +646,16 @@ var initVnode = function initVnode(vnode, parentContext, namespaceURI) {
650646
};
651647

652648
var updateVnode = function updateVnode(vnode, newVnode, node, parentContext) {
653-
var vtype = vnode.vtype;
649+
if (vnode === newVnode) {
650+
return node;
651+
}
654652

655653
var newNode = node;
654+
var vtype = vnode.vtype;
656655

657656
if (!vtype) {
658-
if (vnode !== newVnode) {
659-
node.nodeValue = newVnode;
660-
}
657+
// textNode
658+
node.nodeValue = newVnode;
661659
} else if (vtype === VELEMENT) {
662660
newNode = updateVelem(vnode, newVnode, node, parentContext);
663661
} else if (vtype === VCOMPONENT) {
@@ -710,7 +708,7 @@ var initChildren = function initChildren(node, children, parentContext) {
710708
if (isArr(children)) {
711709
flattenChildren(children, collectVchild, node, parentContext);
712710
} else {
713-
collectVchild(children, 0, node, parentContext);
711+
collectVchild(children, node, parentContext);
714712
}
715713
};
716714

@@ -723,18 +721,15 @@ var updateChildren = function updateChildren(node, newChildren, parentContext) {
723721
if (isArr(newChildren)) {
724722
flattenChildren(newChildren, collectNewVchild, newVchildren, vchildren);
725723
} else {
726-
collectNewVchild(newChildren, 0, newVchildren, vchildren);
724+
collectNewVchild(newChildren, newVchildren, vchildren);
727725
}
728-
node.vchildren = newVchildren;
729726

730727
var item = null;
731728
while (item = vchildren.pop()) {
732729
destroyVnode(item.vnode, item.node);
733730
node.removeChild(item.node);
734731
}
735732

736-
var indexOffset = 0;
737-
var currentNode = null;
738733
for (var i = 0, len = newVchildren.length; i < len; i++) {
739734
var newItem = newVchildren[i];
740735
var oldItem = newItem.prev;
@@ -761,7 +756,7 @@ var attachNode = function attachNode(node, newNode, existNode) {
761756
}
762757
};
763758

764-
var collectVchild = function collectVchild(vchild, index, node, parentContext) {
759+
var collectVchild = function collectVchild(vchild, node, parentContext) {
765760
if (vchild == null || isBln(vchild)) {
766761
return false;
767762
}
@@ -776,7 +771,7 @@ var collectVchild = function collectVchild(vchild, index, node, parentContext) {
776771
});
777772
};
778773

779-
var collectNewVchild = function collectNewVchild(newVchild, __, newVchildren, vchildren) {
774+
var collectNewVchild = function collectNewVchild(newVchild, newVchildren, vchildren) {
780775
if (newVchild == null || isBln(newVchild)) {
781776
return false;
782777
}
@@ -812,9 +807,8 @@ var updateVelem = function updateVelem(velem, newVelem, node, parentContext) {
812807
var newProps = newVelem.props;
813808
var oldHtml = props.dangerouslySetInnerHTML && props.dangerouslySetInnerHTML.__html;
814809
var newChildren = newProps.children;
815-
var vchildren = node.vchildren;
816810

817-
if (oldHtml == null && vchildren.length) {
811+
if (oldHtml == null && node.vchildren.length) {
818812
updateChildren(node, newChildren, parentContext);
819813
patchProps(node, props, newProps);
820814
} else {
@@ -836,7 +830,6 @@ var updateVelem = function updateVelem(velem, newVelem, node, parentContext) {
836830

837831
var destroyVelem = function destroyVelem(velem, node) {
838832
var props = velem.props;
839-
var children = props.children;
840833
var vchildren = node.vchildren;
841834

842835
var item = null;
@@ -1645,12 +1638,13 @@ var forEach = function forEach(children, iteratee, context) {
16451638
if (children == null) {
16461639
return children;
16471640
}
1641+
var index = 0;
16481642
if (isArr(children)) {
1649-
flattenChildren(children, function (child, index) {
1650-
iteratee.call(context, child, index);
1643+
flattenChildren(children, function (child) {
1644+
iteratee.call(context, child, index++);
16511645
});
16521646
} else {
1653-
iteratee.call(context, children, 0);
1647+
iteratee.call(context, children, index);
16541648
}
16551649
};
16561650

dist/react-lite.js

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -337,19 +337,15 @@
337337
};
338338

339339
var flattenChildren = function flattenChildren(list, iteratee, a, b) {
340-
return flat(list, iteratee, 0, a, b);
341-
};
342-
343-
var flat = function flat(list, iteratee, index, a, b) {
344340
var len = list.length;
345341
var i = -1;
346342

347343
while (len--) {
348344
var item = list[++i];
349345
if (isArr(item)) {
350-
index = flat(item, iteratee, index, a, b);
346+
flattenChildren(item, iteratee, a, b);
351347
} else {
352-
iteratee(item, index++, a, b);
348+
iteratee(item, a, b);
353349
}
354350
}
355351
};
@@ -654,14 +650,16 @@
654650
};
655651

656652
var updateVnode = function updateVnode(vnode, newVnode, node, parentContext) {
657-
var vtype = vnode.vtype;
653+
if (vnode === newVnode) {
654+
return node;
655+
}
658656

659657
var newNode = node;
658+
var vtype = vnode.vtype;
660659

661660
if (!vtype) {
662-
if (vnode !== newVnode) {
663-
node.nodeValue = newVnode;
664-
}
661+
// textNode
662+
node.nodeValue = newVnode;
665663
} else if (vtype === VELEMENT) {
666664
newNode = updateVelem(vnode, newVnode, node, parentContext);
667665
} else if (vtype === VCOMPONENT) {
@@ -714,7 +712,7 @@
714712
if (isArr(children)) {
715713
flattenChildren(children, collectVchild, node, parentContext);
716714
} else {
717-
collectVchild(children, 0, node, parentContext);
715+
collectVchild(children, node, parentContext);
718716
}
719717
};
720718

@@ -727,18 +725,15 @@
727725
if (isArr(newChildren)) {
728726
flattenChildren(newChildren, collectNewVchild, newVchildren, vchildren);
729727
} else {
730-
collectNewVchild(newChildren, 0, newVchildren, vchildren);
728+
collectNewVchild(newChildren, newVchildren, vchildren);
731729
}
732-
node.vchildren = newVchildren;
733730

734731
var item = null;
735732
while (item = vchildren.pop()) {
736733
destroyVnode(item.vnode, item.node);
737734
node.removeChild(item.node);
738735
}
739736

740-
var indexOffset = 0;
741-
var currentNode = null;
742737
for (var i = 0, len = newVchildren.length; i < len; i++) {
743738
var newItem = newVchildren[i];
744739
var oldItem = newItem.prev;
@@ -765,7 +760,7 @@
765760
}
766761
};
767762

768-
var collectVchild = function collectVchild(vchild, index, node, parentContext) {
763+
var collectVchild = function collectVchild(vchild, node, parentContext) {
769764
if (vchild == null || isBln(vchild)) {
770765
return false;
771766
}
@@ -780,7 +775,7 @@
780775
});
781776
};
782777

783-
var collectNewVchild = function collectNewVchild(newVchild, __, newVchildren, vchildren) {
778+
var collectNewVchild = function collectNewVchild(newVchild, newVchildren, vchildren) {
784779
if (newVchild == null || isBln(newVchild)) {
785780
return false;
786781
}
@@ -816,9 +811,8 @@
816811
var newProps = newVelem.props;
817812
var oldHtml = props.dangerouslySetInnerHTML && props.dangerouslySetInnerHTML.__html;
818813
var newChildren = newProps.children;
819-
var vchildren = node.vchildren;
820814

821-
if (oldHtml == null && vchildren.length) {
815+
if (oldHtml == null && node.vchildren.length) {
822816
updateChildren(node, newChildren, parentContext);
823817
patchProps(node, props, newProps);
824818
} else {
@@ -840,7 +834,6 @@
840834

841835
var destroyVelem = function destroyVelem(velem, node) {
842836
var props = velem.props;
843-
var children = props.children;
844837
var vchildren = node.vchildren;
845838

846839
var item = null;
@@ -1649,12 +1642,13 @@
16491642
if (children == null) {
16501643
return children;
16511644
}
1645+
var index = 0;
16521646
if (isArr(children)) {
1653-
flattenChildren(children, function (child, index) {
1654-
iteratee.call(context, child, index);
1647+
flattenChildren(children, function (child) {
1648+
iteratee.call(context, child, index++);
16551649
});
16561650
} else {
1657-
iteratee.call(context, children, 0);
1651+
iteratee.call(context, children, index);
16581652
}
16591653
};
16601654

dist/react-lite.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/react-lite.min.js.gz

-48 Bytes
Binary file not shown.

src/Children.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ export let forEach = (children, iteratee, context) => {
1212
if (children == null) {
1313
return children
1414
}
15+
let index = 0
1516
if (_.isArr(children)) {
16-
_.flattenChildren(children, (child, index) => {
17-
iteratee.call(context, child, index)
17+
_.flattenChildren(children, child => {
18+
iteratee.call(context, child, index++)
1819
})
1920
} else {
20-
iteratee.call(context, children, 0)
21+
iteratee.call(context, children, index)
2122
}
2223
}
2324

src/util.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,16 @@ export let pipe = (fn1, fn2) => {
2828
}
2929
}
3030

31-
3231
export let flattenChildren = (list, iteratee, a, b) => {
33-
return flat(list, iteratee, 0, a, b)
34-
}
35-
36-
let flat = (list, iteratee, index, a, b) => {
3732
let len = list.length
3833
let i = -1
3934

4035
while (len--) {
4136
let item = list[++i]
4237
if (isArr(item)) {
43-
index = flat(item, iteratee, index, a, b)
38+
flattenChildren(item, iteratee, a, b)
4439
} else {
45-
iteratee(item, index++, a, b)
40+
iteratee(item, a, b)
4641
}
4742
}
4843
}

src/virtual-dom.js

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,16 @@ export let initVnode = (vnode, parentContext, namespaceURI) => {
5757
return node
5858
}
5959

60-
export let updateVnode = (vnode, newVnode, node, parentContext) => {
61-
let { vtype } = vnode
60+
let updateVnode = (vnode, newVnode, node, parentContext) => {
61+
if (vnode === newVnode) {
62+
return node
63+
}
64+
6265
let newNode = node
66+
let { vtype } = vnode
6367

64-
if (!vtype) {
65-
if (vnode !== newVnode) {
66-
node.nodeValue = newVnode
67-
}
68+
if (!vtype) { // textNode
69+
node.nodeValue = newVnode
6870
} else if (vtype === VELEMENT) {
6971
newNode = updateVelem(vnode, newVnode, node, parentContext)
7072
} else if (vtype === VCOMPONENT) {
@@ -116,7 +118,7 @@ let initChildren = (node, children, parentContext) => {
116118
if (_.isArr(children)) {
117119
_.flattenChildren(children, collectVchild, node, parentContext)
118120
} else {
119-
collectVchild(children, 0, node, parentContext)
121+
collectVchild(children, node, parentContext)
120122
}
121123
}
122124

@@ -126,18 +128,15 @@ let updateChildren = (node, newChildren, parentContext) => {
126128
if (_.isArr(newChildren)) {
127129
_.flattenChildren(newChildren, collectNewVchild, newVchildren, vchildren)
128130
} else {
129-
collectNewVchild(newChildren, 0, newVchildren, vchildren)
131+
collectNewVchild(newChildren, newVchildren, vchildren)
130132
}
131-
node.vchildren = newVchildren
132133

133134
let item = null
134135
while (item = vchildren.pop()) {
135136
destroyVnode(item.vnode, item.node)
136137
node.removeChild(item.node)
137138
}
138139

139-
let indexOffset = 0
140-
let currentNode = null
141140
for (let i = 0, len = newVchildren.length; i < len; i++) {
142141
let newItem = newVchildren[i]
143142
let oldItem = newItem.prev
@@ -164,7 +163,7 @@ let attachNode = (node, newNode, existNode) => {
164163
}
165164
}
166165

167-
let collectVchild = (vchild, index, node, parentContext) => {
166+
let collectVchild = (vchild, node, parentContext) => {
168167
if (vchild == null || _.isBln(vchild)) {
169168
return false
170169
}
@@ -179,7 +178,7 @@ let collectVchild = (vchild, index, node, parentContext) => {
179178
})
180179
}
181180

182-
let collectNewVchild = (newVchild, __, newVchildren, vchildren) => {
181+
let collectNewVchild = (newVchild, newVchildren, vchildren) => {
183182
if (newVchild == null || _.isBln(newVchild)) {
184183
return false
185184
}
@@ -211,9 +210,8 @@ let updateVelem = (velem, newVelem, node, parentContext) => {
211210
let newProps = newVelem.props
212211
let oldHtml = props.dangerouslySetInnerHTML && props.dangerouslySetInnerHTML.__html
213212
let newChildren = newProps.children
214-
let { vchildren } = node
215213

216-
if (oldHtml == null && vchildren.length) {
214+
if (oldHtml == null && node.vchildren.length) {
217215
updateChildren(node, newChildren, parentContext)
218216
_.patchProps(node, props, newProps)
219217
} else {
@@ -235,7 +233,6 @@ let updateVelem = (velem, newVelem, node, parentContext) => {
235233

236234
let destroyVelem = (velem, node) => {
237235
let { props } = velem
238-
let { children } = props
239236
let { vchildren } = node
240237
let item = null
241238

0 commit comments

Comments
 (0)