vue的渲染【模板、渲染函数】

一、基于 HTML 的模板语法,实现渲染。

  • 在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

 

二、使用渲染函数,实现渲染。https://cn.vuejs.org/v2/guide/render-function.html

     Vue 推荐在绝大多数情况下使用模板来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力。

   Render函数通过createElement参数来创建 Virtual Dom

1、createElement 用法

// @returns {VNode}
createElement(
  // {String | Object | Function}
  // 一个 HTML 标签名、组件选项对象,或者
  // resolve 了上述任何一种的一个 async 函数。必填项。
  'div',

  // {Object}
  // 一个与模板中 attribute 对应的数据对象。可选。
  {
    // (详情见下一节)
  },

  // {String | Array}
  // 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
  // 也可以使用字符串来生成“文本虚拟节点”。可选。
  [
    '先写一些文字',
    createElement('h1', '一则头条'),
    createElement(MyComponent, {
      props: {
        someProp: 'foobar'
      }
    })
  ]
)
  • 第一个参数必选,可以是一个HTML标签,也可以是一个组件或函数;
    // {String | Object | Function}
    // 一个 HTML 标签名、组件选项对象,或者 resolve 了上述任何一种的一个 async 函数。
  • 第二个是 可选参数,数据对象。【一个与模板中 attribute 对应的数据对象,就是把标签的属性都写到这里了】
    • class:
    • style:
    • attrs:
    • props
    • 等等
  • 第三个是  子节点,也是可选参数,用法一致。数组中每一项 也是一个 createElement() ,层层递进的。
      // {String | Array}
      // 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
      // 也可以使用字符串来生成“文本虚拟节点”。

完整示例:

export default {
  name: "demo",
  render(createElement) {
    return createElement("div",[
      createElement("span", "我的 div标签 =>span 标签"),
      createElement("p", [
          createElement("span", "我是 div标签 => p标签 => span标签 => 文字")
      ])
    ])
  }
}

2、JSX 【vue-cli脚手架需要额外安装这个 Babel插件

  你可能会觉得上面这种代码写起来很痛苦,所以Vue提供了 JSX 语法,它可以让我们回到更接近于模板的语法上。

import AnchoredHeading from './AnchoredHeading.vue'

new Vue({
  el: '#demo',
  render: function (h) {
    return (
      <AnchoredHeading level={1}>
        <span>Hello</span> world!
      </AnchoredHeading>
    )
  }
})

 

posted @ 2022-03-29 19:11  吴飞ff  阅读(556)  评论(0编辑  收藏  举报