Vue 中将 json 样式模板 渲染成 vnode render

发布于 2022-09-13 00:20:03 字数 805 浏览 10 评论 0

用来渲染模板样式时候会用到,将json转成dom,防止提交不必要的参数 需要将

[{
    "a": 1,
    "b": 11
}, {
    "a": 2,
    "b": 22,
    "children": [{
        "a": 3,
        "b": 33
    }, {
        "a": 4,
        "b": 44,
        "children": [{
            "a": 5,
            "b": 55
        }]
    }]
}]

这种 无限嵌套的 格式转成vue的render

createElement('section', {style:a|1},[b|11,[
  createElement('section', {style:a|2},[b|22,
     createElement('section', {style:a|3},b|33)
     createElement('section', {style:a|4},[b|44,
                createElement('section', {style:a|5},b|55)
     ])
   ])
])

a 是字符串 style b是文字,有人提是不是要利用广度优先遍历,我发现我递归不出来 好头疼。

image.png

我是这么 递归的 发现只能显示到2层会有style,后面的没有section style

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

满身野味 2022-09-20 00:20:03

createChildren 创建子元素,深度优先遍历子虚拟节点,递归调用 createElm,遍历过程中把 vnode.elm 作为父容器的 DOM 节点占位符传入

function createChildren(vnode, children, insertedVnodeQueue){
    if(Array.isArray(children)){
        if(process.env.NODE_ENV !== 'production'){
            checkDuplicateKeys(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)))
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文