手写render的时候,第三个参数即children, 如果children是一个数组,里面的每项好像没有text属性?

来源:2-7 createElement

前端沙雕

2020-06-05

return createElement(
‘h’ + this.level,
[
createElement(‘a’, {
attrs: {
name: headingId,
href: ‘#’ + headingId
}
}, [‘message’, ‘abc’])
]
)
},
function isTextNode (node): boolean {
return isDef(node) && isDef(node.text) && isFalse(node.isComment)
}

children里面的内容都没有text属性,那么怎么会有isDef(node.text)

写回答

2回答

sowtf

2020-06-08

text 属性是可以自己手写的

文本节点可以简写为基础类型字符串,也可以写成[{text:'message'},{text:'abc'}]带有 text 这个特定key 的对象

当 children 是[‘message’, ‘abc’]的时候,会走到 normalizeArrayChildren中的isPrimitive判断,

当 children 是[{text:'message'},{text:'abc'}]的时候会走到normalizeArrayChildren中的isTextNode判断

所以文本节点是可以手写成引用类型的,{text:'xxx'} 相当于 'xxx'


1
1
前端沙雕
非常感谢!
2020-06-12
共1条回复

ustbhuangyi

2020-06-05

//img.mukewang.com/szimg/5ed9a9c4095f191b20900772.jpg
原始数据会走到这个逻辑吧

0
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程