vue中render函数的使用

render函数

vue通过 template 来创建你的 HTML。但是,在特殊情况下,这种写死的模式无法满足需求,必须需要js的编程能力。此时,需要用render来创建HTML。

什么情况下适合使用render函数

在一次封装一套通用按钮组件的工作中,按钮有四个样式(success、error、warning、default)。首先,你可能会想到如下实现

  <div class="btn btn-success" v-if="type === ‘success‘">{{ text }}</div>
  <div class="btn btn-danger" v-else-if="type === ‘danger‘">{{ text }}</div>
  <div class="btn btn-warning" v-else-if="type === ‘warning‘">{{ text }}</div>

这样写在按钮样式少的时候完全没有问题,但是试想,如果需要的按钮样式有十多个。那么template写死的方式就显得很无力了。遇上类似这样的情况,使用render函数可以说最优选择了。

根据实际情况改写按钮组件

首先render函数生成的内容相当于template的内容,故使用render函数时,在.vue文件中需要先把template标签去掉。只保留逻辑层。

export default {
  props: {
    type: {
      type: String,
      default: ‘normal‘
    },
    text: {
      type: String,
      default: ‘normal‘
    }
  },
  computed: {
    tag() {
      switch (this.type) {
        case ‘success‘:
          return 1;
        case ‘danger‘:
          return 2;
        case ‘warning‘:
          return 3;
        default:
          return 1;
      }
    }
  },
  render(h) {
    return h(‘div‘, {
      class: {
        btn: true,
        ‘btn-success‘: this.type === ‘success‘,
        ‘btn-danger‘: this.type === ‘danger‘,
        ‘btn-warning‘: this.type === ‘warning‘
      },
      domProps: {
        innerText: this.text
      },
      on: {
        click: this.handleClick
      }
    });
  },
  methods: {
    handleClick() {
      console.log(‘-----------------------‘);
      console.log(‘do something‘);
    }
  }
};

根据组件化思维,能抽象出来的东西绝不写死在逻辑上。这里的clickHandle函数可以根据按钮的type类型触发不同的逻辑,就不多叙述了。

然后在父组件调用

<Button type="danger" text="test"></Button>

使用jsx

是的,要记住每个参数的类型同用法,按序传参实在是太麻烦了。那么其实可以用jsx来优化这个繁琐的过程。

  render() {
    return (
      <div
        class={{
          btn: true,
          ‘btn-success‘: this.type === ‘success‘,
          ‘btn-danger‘: this.type === ‘danger‘,
          ‘btn-warning‘: this.type === ‘warning‘
        }}
        onClick={this.handleClick}>
        {this.text}
      </div>
    );
  },

原文地址:https://www.cnblogs.com/qianduanwriter/p/11831173.html

时间: 2024-10-08 12:57:21

vue中render函数的使用的相关文章

【Vue】彻底理解Vue中render函数与template的区别

一.render函数与template对比 VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数. 以下我们来做一个需求跟根据level等级来编写对应等级的标题 template解析 <body>   <divid="app">       <h-titlelevel=1>           <p>li</p>       </

vue中钩子函数的用法

这么多钩子函数,我们怎么用呢,我想大家可能有这样的疑问吧,我也有,哈哈哈. beforecreate : 举个栗子:可以在这加个loading事件 created :在这结束loading,还做一些初始化,实现函数自执行 mounted: 在这发起后端请求,拿回数据,配合路由钩子做一些事情 beforeDestory: 你确认删除XX吗? destoryed :当前组件已被删除,清空相关内容 当然,还有更多,继续探索中-- 原文地址:https://www.cnblogs.com/zr123/p

vue中节流函数实现搜索数据

在日常开发中有很多场景我们都需要用到节流函数和防抖函数,比如:实现输入框的模糊查询因为需要轮询ajax,影响浏览器性能,所以需要用到节流函数:实现手机号.姓名之类的的验证,往往我们只需要验证一次,这个时候我们就需要用到防抖函数:但是网上的很多资料都是不够具体和便于理解. 基本代码如下 <el-input placeholder="请输入搜索内容" suffix-icon="el-icon-search" class="searchItem searc

React中render函数中变量map中事件无法关联的解决办法

如下所示的代码,Input的checkbox可以正常显示3个,但是都无法和 handleChange关联上. 由于代码无法正常显示,我用图片 var Input = ReactBootstrap.Input; var TestCom = React.createClass({ getInitialState: function() { return {value: 'Hello!', value2: 'nihao2' }; }, handleChange: function(event) { v

vue中find函数

let obj = this.role.find(v => v.code === res.company.role)循环 data对象中的role数组 ,每个数组元素用v代替,code为他的键,返回找到的数组元素对象. 原文地址:https://www.cnblogs.com/erfsfj-dbc/p/10063533.html

VUE中的函数的防抖和节流 以及应用场景

先看看概念 函数防抖(debounce): 在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时:典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时. 应用场景: search搜索联想,用户在不断输入值时,用防抖来节约请求资源. window触发resize的时候,不断的调整浏览器窗口大小会不断的触发这个事件,用防抖来让其只触发一次 函数节流(throttle): 规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效:

Vue学习笔记进阶篇——Render函数

本文为转载,原文:Vue学习笔记进阶篇--Render函数 基础 Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML.然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器. <h1> <a name="hello-world" href="#hello-world"> Hello world! </a> </h1>

理解Vue中的Render渲染函数

VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数.比如如下我想要实现如下html: <div id="container"> <h1> <a href="#"> Hello world! </a> </h1> </div> 我们会如下使用: <!DOCTYPE html> <html

vue实例中的render函数

在runtime-only的vue版本中使用的就是render函数,运行依赖的一般都是runtime-omly的vue,compile版本占的体积太大不适合用作运行版本.因为缺少编译器,浏览器不能直接识别.vue文件,因此在开发时会把vue相关的代码编译成浏览器识别的js,在浏览器运行时便只需要,只用来运行的runtime-only版vuejs即可. 原文地址:https://www.cnblogs.com/chujunqiao/p/11624338.html