使用Vue的渲染函数渲染html元素,父节点可以渲染出来,子节点却渲染不出来。
组件内:
<script>
export default {
props: {
renderConfig: {
type: Object,
required: true
}
},
data() {
return {}
},
render(h) {
let ele = this.renderElements(h, this.renderConfig)
console.log(ele)
return ele
},
methods: {
renderElements(h, renderConfig) {
if (!h || !renderConfig) {
return
}
if (renderConfig.children && renderConfig.children.length) {
let children = []
for (let element of renderConfig.children) {
// 递归查找有子元素的配置并render出vnode
children.push(this.renderElements(h, element))
}
console.log(children)
return h(
renderConfig.tag,
{ ...Object.assign(renderConfig.properties) },
children
)
}
return h(renderConfig.tag, { ...Object.assign(renderConfig.properties) })
}
}
}
</script>
传给组件的props:
{
tag: 'div',
properties: {
attrs: { id: 'myDiv', 'data-url': 'www.abc123.com' },
domProps: { innerHTML: 'Hello, myDiv' },
on: {
click: this.handleClick
}
},
children: [
{
tag: 'label',
properties: {
attrs: { id: 'myLabel' },
domProps: { innerHTML: '输入框: ' }
}
},
{
tag: 'input',
properties: {
attrs: { id: 'myInput', value: 'hello~~' }
},
on: { change: this.handleChange }
}
]
}
ele的log结果:
两个子vnode的log结果:
DOM的结果:
可以看见在renderElements()里子元素(vnode)是有值的,而到了render(h)之后就消失了,请问是哪里出了错?
鄙人已经看了好久了,实在是看不出来。。。。
智慧大石
相关分类