normalizeChildren 与 createChildren 函数之间的关联
来源:2-7 createElement

aznmoe
2019-12-31
在 render 阶段 进入 normalizeChildren 函数的时候 是将 children 整理成 vnode[]
也既是 function normalizeChildren (children: any): ?Array<VNode>
在 update 阶段当 传入的 vnode 定义了 tag,那么 将会 进入createChildren(vnode, children, insertedVnodeQueue);
这个函数,也就是 对 children 进行整理。 在 createChildren
函数中 有 个 判断条件
function createChildren(vnode, children, insertedVnodeQueue) {
// children 不应该 一直都是一个数组么,什么条件 会进入 else if 语句
if (Array.isArray(children)) {
for (let i = 0; i < children.length; ++i) {
createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);
}
} else if (isPrimitive(vnode.text)) {
nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
}
}
由于 normalizeChildren
函数 一直 都是 返回一个 数组的,那么 什么条件情况下 createChildren
会进入 isPrimitive(vnode.text)
这个 条件里面
写回答
1回答
-
createChildren 函数中的 children 还可能是 undefined,考虑到 createElm 函数就是递归执行 createChildren,vnode.chiddren 可能是 undefined ,就走到了 else if 逻辑了
042020-01-14
相似问题