美文网首页
vue render函数

vue render函数

作者: Rose_yang | 来源:发表于2019-08-15 16:03 被阅读0次
render 函数
render: function (createElement) {
  return createElement('h1', this.blogTitle)
}
虚拟 DOM

Vue 通过建立一个虚拟 DOM对真实 DOM 发生的变化保持追踪

Vue.js(2.0版本)与React的其中最大一个相似之处,就是他们都使用了一种叫'Virtual DOM'的东西。所谓的Virtual DOM基本上说就是它名字的意思:虚拟DOM,DOM树的虚拟表现。它的诞生是基于这么一个概念:改变真实的DOM状态远比改变一个JavaScript对象的花销要大得多

Virtual DOM是一个映射真实DOM的JavaScript对象,如果需要改变任何元素的状态,那么是先在Virtual DOM上进行改变,而不是直接改变真实的DOM。当有变化产生时,一个新的Virtual DOM对象会被创建并计算新旧Virtual DOM之间的差别。之后这些差别会应用在真实的DOM上。

return createElement('h1', this.blogTitle)
createElement函数的参数
createElement(
//----------- 第1个参数 -----------------------------------------------------------
  // {String | Object | Function}
  // 一个 HTML 标签字符串,组件选项对象,或者一个返回值类型为 String/Object 的函数,必要参数
  'div',
//----------- 第2个参数 -----------------------------------------------------------
  // {Object}
  // 一个包含模板相关属性的数据对象
  // 这样,您可以在 template 中使用这些属性。可选参数。
  {
  // 和`v-bind:class`一样的 API
  'class': {
    foo: true,
    bar: false
  },
  // 和`v-bind:style`一样的 API
  style: {
    color: 'red',
    fontSize: '14px'
  },
  // 正常的 HTML 特性************
  attrs: {
    id: 'foo'
  },
  // 组件 props
  props: {
    myProp: 'bar'
  },
  // DOM 属性************
  domProps: {
    innerHTML: 'baz'
  },
  // 事件监听器基于 `on`************
  // 所以不再支持如 `v-on:keyup.enter` 修饰器
  // 需要手动匹配 keyCode。
  on: {
    click: this.clickHandler
  },
  // 仅对于组件,用于监听原生事件,而不是组件内部使用 `vm.$emit` 触发的事件。
  nativeOn: {
    click: this.nativeClickHandler
  },
  // 自定义指令。注意事项:不能对绑定的旧值设值************
  // Vue 会为您持续追踪
  directives: [
    {
      name: 'my-custom-directive',
      value: '2',
      expression: '1 + 1',
      arg: 'foo',
      modifiers: {
        bar: true
      }
    }
  ],
  // Scoped slots in the form of  ************
  // { name: props => VNode | Array<VNode> }
  scopedSlots: {
    default: props => createElement('span', props.text)
  },
  // 如果组件是其他组件的子组件,需为插槽指定名称
  slot: 'name-of-slot',
  // 其他特殊顶层属性************
  key: 'myKey',
  ref: 'myRef'
},
//----------- 第3个参数 -----------------------------------------------------------
  // {String | Array}
  // 子节点 (VNodes),由 `createElement()` 构建而成,
  // 或使用字符串来生成“文本节点”。可选参数。
  [
    '先写一些文字',
    createElement('h1', '一则头条'),
    createElement(MyComponent, {
      props: {
        someProp: 'foobar'
      }
    })
  ]
)

字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode。

Vue 选项中的 render 函数若存在,则 Vue 构造函数不会从 template 选项或通过 el 选项指定的挂载元素中提取出的 HTML 模板编译渲染函数。

使用javascript代替模板功能,某些api要自己实现

1、使用if/else代替v-if
2、使用map代替v-for, 只有map方法才能检测改变,其他的方法不能根据数据的改变能改变相应的状态
3、v-model 使用domProps来实现双向绑定

createElement('input',  
       {  
           domProps:{  
               value:self.v  
                   },  
            on:{  
                 input:function(event){  
                        self.$emit('input',event.target.value)  

                         }  
                   }  
       });  

相关文章

网友评论

      本文标题:vue render函数

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