zoukankan      html  css  js  c++  java
  • Virtual DOM-渲染函数render -vue

    1、Virtual DOM:

    1)构建一个浏览器DOM的拷贝树,包含DOM树的所有拷贝节点VNode,通过创建VNode更新到真实DOM

    2)VNode创建:

    createElement(tag,{ },[ ])         // tag:元素标签名,{ }:元素属性集合,[ ]:子元素列表

    createElement(tag,{ },String)  // String: 元素文本

    3)同一个地方只能有一个VNode

    2、模板<template> 与 render 比较:

    1)模板写法更简单,大部分用模板,性能方面其实模板最终也会被编译器译为render函数

    2)有些场景用 render会更简单

    3、渲染函数render : 

    1)render(createElement) { } 

    2)render函数中还可以使用if/else和map来实现模板中的v-if和v-for

    《vue.js前端开发技术》 p236

    createElement第一个参数使用:
    export default {
       render(createElement) {
         return createElement({
             template:'<div></div>'
         });
        或者
         return createElement('div');
         或者
         return createElement(function(){
             return {
                 template:'<div></div>'
             }
         });
       }
     }

    4、应用场景:

    1) render: h => h(App);

    2) 与slot结合使用

    没有使用render时,需要重复多个solt
    父组件引用:<x-header :level="2"> 哈哈哈哈 </x-header>
    子组件内容:
    <template>
       <h1 v-if="level === 1">
         <slot></slot>
       </h1>
       <h2 v-else-if="level === 2">
         <slot></slot>
       </h2>
        <h3 v-else="level === 3">
         <slot></slot>
       </h3>
    </template>
    <script>
     export default {
       props:['level']
     }
    </script>
    -----------------------------------------
    用render:
    父组件引用:<x-header :level="2"> 哈哈哈哈 </x-header>
    子组件内容:
    <script>
     export default {
       props:['level'],
       render(createElement) {
         let that = this;
         return createElement('h'+ this.level,this.$slots.default)
       }
     }
    </script>
  • 相关阅读:
    git clone代码总是失败
    sublime常用快捷键及插件
    canvas圆形倒计时
    box-show的用法
    全选、反选
    数据库,增删改查
    PHP操作MySQL
    输出六个随机字符串
    约瑟夫环的故事
    Unix编程艺术——摘录一
  • 原文地址:https://www.cnblogs.com/yuyedaocao/p/11981535.html
Copyright © 2011-2022 走看看