美文网首页
渲染函数&JSX

渲染函数&JSX

作者: 66pillow | 来源:发表于2017-10-27 20:48 被阅读0次

    1.基础

    render函数提供javascript完全编程能力

    <!--h1>Hello world!</h1-->
    <my-header level="1">Hello world!</my-header>
    <!--h2>Hello world!</h2-->
    <my-header level="2">Hello world!</my-header>
    
    Vue.component('myHeader', {
        props: ["level"],
        render: function (createElement) {
            return createElement(
                    //html
                    'h' + this.level,
                    //slot
                    this.$slots.default
            );
        }
    });
    

    2.节点,树以及虚拟DOM

    虚拟DOM:vue通过建立一个虚拟DOM对真实DOM发生的变化保持追踪,createElement返回虚拟节点(VNode)

    <!--<div id="foo" class="foo" style="color: red; font-size: 14px;">文本<h1>2</h1></div>-->
    <my-component></my-component>
    
    Vue.component('myComponent', {
        render: function (createElement) {
            return createElement(
                    // {String | Object | Function} 必须
                    'div',
                    // {Object} 可选 包含模板相关属性的数据对象
                    {
                        'class': {
                            foo: true,
                            bar: false
                        },
                        style: {
                            color: 'red',
                            fontSize: '14px'
                        },
                        attrs: {
                            id: 'foo'
                        },
                        props: {
                            myProp: 'bar'
                        }
    //                  domProps: {
    //                       innerHTML: 'baz'
    //                  }
                    },
                    // {String | Array} 子节点(VNodes)
                    [
                        '文本',
                        createElement('h1', '2')
    //                  createElement(myComponent, {
    //                       props: {
    //                           someProp: 'foobar'
    //                       }
    //                   })
                    ]
            );
        }
    });
    

    组件树中所有VNodes必须唯一

    3.JSX

    Vue支持JSX语法(通过Babel插件编译)

    new Vue({
        el:'#demo',
        render (h){
            return (
                <div></div>
            )
        }
    });
    

    h作为createElement别名是Vue惯例

    4.函数式组件

    标记组件为functional,意味它是无状态(没有data),无实例(没有this上下文)

    Vue模板实际编译成了render函数

    相关文章

      网友评论

          本文标题:渲染函数&JSX

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