一、模板缺陷(模板的最大特点是扩展难度大,不易扩展。可能会造成逻辑冗余)
<level :type="1">哈哈</level>
<level :type="2">呵呵</level>
<level :type="3">嘿嘿</level>
Level组件需要对不同的type产生不同的标签
<template>
  <h1 v-if="type==1">
    <slot></slot>
  </h1>
  <h2 v-else-if="type==2">
    <slot></slot>
  </h2>
  <h3 v-else-if="type==3">
    <slot></slot>
  </h3>
</template>
<script>
 export default {
    props:{
      type:{
        type:Number
      }
    }
  }
</script>
 
二、函数式组件
函数式组件没有模板,只允许提供render函数
<script>
export default {
  render(h){
    return h('h'+this.type,{},this.$slots.default);
  },
  props:{
    type:{
      type:Number
    }
  }
}
</script>
 
三、JSX应用
使用jsx会让代码看起来更加简洁易于读取
<script>
export default {
  render(h){
    const tag = 'h' + this.type;
    return <tag>{this.$slots.default}</tag>;
  },
  props:{
    type:{
      type:Number
    }
  }
}
</script>
 
四、render方法定制组件
编写list组件可以根据用户传入的数据自动循环列表
<List :data="data"></List>
<script>
import List from './components/List'
export default {
  data(){
    return {
      data:["苹果","香蕉","橘子"]
    };
  },
  components:{
    List
  }
}
</script>
<!-- List组件渲染列表 -->
<template>
  <div class="list">
    <div v-for="(item,index) in data" :key="index">
      <li>{{item}}</li>
    </div>
  </div>
</template>
<script>
export default {
  props:{
    data:Array,
    default:()=>[]
  }
}
</script>
通过render方法来定制组件
1、在父组件中传入render方法
<List :data="data" :render="render"></List>
<script>
export default {
  render(h,name){
    return <span>{name}</span>
  },
  data(){
    return{
      data:['西瓜','草莓','桃子']
    }
  }
}
</script>
我们需要createElement方法,就会想到可以编写某个函数组件,
将createElement方法传递出来
2、子组件接受方法传递给函数组件
<template>
  <div class="list">
    <template v-for="(item,index) in data" :key="index">
      <li v-if="!render">{{item}}</li>
      <ListItem v-else :item="item" :render="render"></ListItem>
    </template>
  </div>
</template>
<script>
import ListItem form './ListItem'
export default {
  conponents:{
    ListItem
  },
  props:{
    data:{
      type:Array,
      default:()=>[]
    },
  render:{
      type:Function
   }
  }
}
</script>
3、函数式组件
//ListItem.vue调用最外层render方法,将createElement方法传递出来
export default {
  render(h){
    this.render(h,this.item)
  },
  props:{
  item:{
    type:Function
  },
  render:{
    type:Function
  }
 }
}
五、scope-slot
//使用v-slot可将子组件内部绑定在slot插槽上的值传递到父组件上使用:(原理:在子组件内部编译调用,所以可以调用到。)
<List>
<template v-slot="{item,index}">
  {{item}}
</template>
<List>
<div v-for="(item,index) in data" :key="index">
  <slot :item="item" :index="index"></slot>
</div>

render函数之jsx应用的更多相关文章

  1. vue render函数使用jsx语法 可以使用v-model语法 vuex实现数据持久化

    render函数使用jsx语法: 安装插件  transform-vue-jsx 可以使用v-model语法安装插件 jsx-v-model .babelrc文件配置: vuex实现数据持久化 安装插 ...

  2. 【转】【Html】Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    1.Render函数 所以直接来到Render,本来也想跳过,发现后面的路由貌似跟它还有点关联.先来看看Render 1.1 官网一开始就看的挺懵的,不知道讲的是啥,动手试了一下,一开头讲的是Rend ...

  3. Render渲染函数和JSX

    1.Render函数:render是用来替换temlate的,需要更灵活的模板的写法的时候,用render. 官网API地址:https://cn.vuejs.org/v2/guide/render- ...

  4. Vuejs2.0学习之二(Render函数,createElement,vm.$slots,函数化组件,模板编译,JSX)

    时隔一周多,因为一些别的事情绊住了,下面接着写.中间这段时间也有看官方文档,发现正如他所说90%的基础内容都一样,所以这里直接跳到我比较关注的东东上,要是想看看哪些不一样,可以参考这个http://v ...

  5. Vue之render渲染函数和JSX的应用

    一.模板缺陷 模板的最大特点是扩展难度大,不易扩展.可能会造成逻辑冗余 <Level :type="1">哈哈</Level> <Level :typ ...

  6. Vue.js 渲染函数, JSX(未掌握,未学完)

    渲染函数 , JSX(没完成学习) 基础: 实例属性:vm.$slots default 属性包括了所有没有被包含在具名插槽中的节点. 渲染函数: render: function(createEle ...

  7. vue render函数

    基础 vue推荐在绝大多数情况下使用template来创建你的html.然而在一些场景中,你真的需要javascript的完全编程能力.这就是render函数.它比template更接近编译器 < ...

  8. Vue躬行记(7)——渲染函数和JSX

    除了可通过模板创建HTML之外,Vue还提供了渲染函数和JSX,前者的编码自由度很高,后者对于开发过React的人来说会很熟悉.注意,Vue的模板最终都会被编译成渲染函数. 一.渲染函数 虽然在大部分 ...

  9. QTableView另类打印解决方案(复用render函数去解决print问题)

    Qt QTableView另类打印解决方案     上回书说道Qt的model/view,我就做了个demo用于显示数据库中的内容.没想到tableview的打印竟然成了问题.我困惑了,难道Qt不应该 ...

随机推荐

  1. 【转帖】HBase读写的几种方式(二)spark篇

    HBase读写的几种方式(二)spark篇 https://www.cnblogs.com/swordfall/p/10517177.html 分类: HBase undefined 1. HBase ...

  2. JavaSE面试题:类初始化和实例初始化等

    类初始化过程 1.一个类要创建实例需要先加载并初始化该类 main方法所在的类需要先加载和初始化 2.一个子类要初始化需要先初始化父类 3.一个类初始化就是执行<clinit>()方法 & ...

  3. delphi xe10 FMX 启动参数

    关于 Delphi Xe10 FMX 启动参数  需要在启动窗口前来调用 也就是在bar文件修改 如果参数多可以用json来 uses system.SysUtils; var param: stri ...

  4. vue+element项目中 给input赋值之后无法修改

    点击修改按钮 将值赋值给 input 但是无法修改,input不可编辑,部分input可以编辑 , 解决方法一. 改变data数据初始值 解决方法二. 用this.$set input:{ descr ...

  5. Drool7s kmodule的作用--系列02课

    本文是介绍drool7s kmodule. 一.为什么komdule.xml文件一定要放在resources下的META-INF文件夹中 --->直接看源码吧,请看下图,应该都知道为什么要放在固 ...

  6. HBase 系列(一)—— HBase 简介

    一.Hadoop的局限 HBase 是一个构建在 Hadoop 文件系统之上的面向列的数据库管理系统. 要想明白为什么产生 HBase,就需要先了解一下 Hadoop 存在的限制?Hadoop 可以通 ...

  7. IntelliJ IDEA 换背景免费酷炫的插件(转)

    一.插件的安装 打开setting文件选择Plugins选项 Ctrl + Alt + S File -> Setting 分别是安装JetBrains插件,第三方插件,本地已下载的插件包. 二 ...

  8. .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    原文:.NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖 我们有多种工具可以将程序集合并成为一个.打包成一个程序集可以避免分发程序的时候带上一堆依赖而出问题. ILMerge 可以用来 ...

  9. C#泛型集合之——链表

    链表基础 1.概述:C#中泛型集合中的链表—LinkedList 是一个双向链表,其结点为LinkedListNode 结构 其中,结点结构包含:Next,Previous,Value三部分.且结点中 ...

  10. Java调用Http/Https接口(2)--HttpURLConnection/HttpsURLConnection调用Http/Https接口

    HttpURLConnection是JDK自身提供的网络类,不需要引入额外的jar包.文中所使用到的软件版本:Java 1.8.0_191. 1.服务端 参见Java调用Http接口(1)--编写服务 ...