美文网首页
实现简单render函数

实现简单render函数

作者: 初晨的风儿 | 来源:发表于2019-08-17 13:59 被阅读0次

什么是Virtual Dom

React和Vue2都使用了Virtual Dom技术,Virtual Dom并不是真正意义上的Dom,而是一个轻量级的JavaScript对象,在状态发生变化时,Virtual Dom会进行Diff运算,来更新只需要被替换的DOM,而不是全部重绘。
与DOM操作相比,Virtual Dom是基于JavaScript计算的,所以开销会小很多。

什么是render函数

Render函数通过Element的参数来创建Virtual Dom,结构精简,代码少且清晰,这里使用了一个demo实例来说明

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        div {
            margin-left: 50px;
            background-color: bisque;
        }
    </style>
</head>
<body>
    <div>

    </div>
    <script>
        const elementObj = {
            tagName: 'div',
            props: {'class': 'list'},
            children: [
                {tagName: 'div', props: {'class': 'list'}, content:"1",
                children: [
                    {tagName: 'div', props: {'class': 'list'}, content:"一"},
                    {tagName: 'div', props: {'class': 'list'}, content:"二",
                        children: [
                            {tagName: 'div', props: {'class': 'list'}, content:"①"},
                            {tagName: 'div', props: {'class': 'list'}, content:"②"}
                        ]
                    }
            ]},
                {tagName: 'div', props: {'class': 'list'}, content:"2",
                children: [
                    {tagName: 'div', props: {'class': 'list'}, content:"一"},
                    {tagName: 'div', props: {'class': 'list'}, content:"二"}
                ]
                }
            ]
        };

        document.querySelector('div').appendChild(render(elementObj));
        //深度遍历
        function render (elementObj) {
            //首先生成父元素
            let el = document.createElement(elementObj.tagName);
            for(propName in elementObj.props){
                propValue = elementObj.props[propName];
                el.setAttribute(propName, propValue);
            }
            if (elementObj.content) {
                console.log(elementObj.content);
                el.innerText = elementObj.content;
            }
            //如果children不为空
            if (elementObj.children) {
                elementObj.children.forEach(function(child){
                    el.appendChild(render(child));
                    }
                );
            }
            return el;
        }
    </script>
</body>
</html>

相关文章

  • 实现简单render函数

    什么是Virtual Dom React和Vue2都使用了Virtual Dom技术,Virtual Dom并不是...

  • Vue自定义组件

    使用render函数实现

  • JS代码题5

    实现一个简单的虚拟 DOM 渲染 实现render函数: 主要用到了DOM API 和递归

  • vue中的render函数式组件

    问题:1、render函数是什么2、render函数怎么用 1. render函数是什么 简单的说,在vue中我们...

  • 4-组件与 prop、state

    语法: 引入Component 新建一个类,继承Component 实现render函数 在render函数内返回...

  • Vue单个页面引入CDN链接

    在了解了render函数与createElement函数的基础上,想要实现Vue单个页面引入CDN链接就简单很多了...

  • 实现render函数

    将树状标签转换渲染为dom节点,利用createElement创建节点,递归渲染子节点

  • render函数 template 中的 v-if 和 v-fo

    vue官网上内容如下 由于使用原生的 JavaScript 来实现某些东西很简单,Vue 的 render 函数没...

  • JS代码题4

    实现一个简单的模板引擎 实现render函数: 这道题的主要考察正则的有关知识: 圆括号 test()方法 exe...

  • Vue - 渲染函数render

    一、render函数是什么 简单的说,在vue中我们使用模板HTML语法来组建页面的,使用render函数我们可以...

网友评论

      本文标题:实现简单render函数

      本文链接:https://www.haomeiwen.com/subject/ifahsctx.html