@
linzhe141 如果不加 key 通过 patchUnkeyedChildren 更新,加了 key 通过 patchKeyedChildren 更新
```js
const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {
c1 = c1 || EMPTY_ARR;
c2 = c2 || EMPTY_ARR;
const oldLength = c1.length;
const newLength = c2.length;
const commonLength = Math.min(oldLength, newLength);
let i;
// "公共"部分,新旧 dom 按照顺序 patch
for (i = 0; i < commonLength; i++) {
const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
patch(
c1[i],
nextChild,
container,
null,
parentComponent,
parentSuspense,
namespace,
slotScopeIds,
optimized
);
}
if (oldLength > newLength) {
unmountChildren(
c1,
parentComponent,
parentSuspense,
true,
false,
commonLength
);
} else {
mountChildren(
c2,
container,
anchor,
parentComponent,
parentSuspense,
namespace,
slotScopeIds,
optimized,
commonLength
);
}
};
```
[playground](
https://play.vuejs.org/#eNp9Uk1PAjEQ/SuTXsQEl88TWUjUcNCDGuVmPeAyLMVu2/QDSTb73512w8LBcOr0zZuZ96at2b0x2SEgm7HcFVYYDw59MAuuRGW09VCDxS00sLW6ghui3nDFVaGV8yCF8yOYR0bvswaxmcGoD4e1DEgRNH2qjuC4A8dncNKBE2i+bmNXrmj4SlSog+/1bmG+gJoraOdkiZ2Z4Ha9tsO06zCFhhoAbPA7lCVarmjMaDgcEpoPWmNkiS4eKyPXHukGkAeZToqkgMPdVts5Z4I4IFQ7lTNY1DQuYk2TD6RoKwepNB9c9GN95h0tZivKbO+0op0m9ZwVujJCon01XtDiOJu1vmJuLaX+fU6YtwH7J7zYYfHzD753x4hx9mbRoT0gZ13Or22Jvk0vP17wSHGXrPQmSGJfSb6j0zJEjS3tIagNyb7gJbVP6WcIVa7c8uhRuZOpKDQym8TnjH7L4xXrZ7mTbJrq6N1Y8wc8q9Yh)