当前位置: 代码网 > it编程>前端脚本>Vue.js > Vue render函数使用详细讲解

Vue render函数使用详细讲解

2024年05月20日 Vue.js 我要评论
dom在浏览器中通过js来操作dom的操作性能很差,于是虚拟dom应运而生。虚拟dom就是在js中模拟dom对象树来优化dom操作的一种技术或思路。虚拟dom并不是真正意义上的dom,它作为一个轻量级

dom

在浏览器中通过js来操作dom的操作性能很差,于是虚拟dom应运而生。虚拟dom就是在js中模拟dom对象树来优化dom操作的一种技术或思路。

虚拟dom并不是真正意义上的dom,它作为一个轻量级的javascript对象,在状态发生变化时,会进行diff运算,来更新发生变化的dom,对于未发生变化的dom节点,不予操作,由于不是全部重绘,大大提高更新渲染性能。

什么是render函数

在vue中我们使用模板html语法组建页面,通过render函数用js语言来构建dom。

因为vue是虚拟dom,所以在拿到template模板时也要转译成vnode的函数,而用render函数构建dom,vue就免去了转译的过程。

render函数构建dom需要用到vue提供的工具createelement函数,约定简写h。

render函数的返回值(vnode)

vnode(即:虚拟节点),也就是我们要渲染的节点。

template与render

template适合逻辑简单,render适合复杂逻辑。render的性能较高,template性能较低。

当存在template与render时,优先展示template(render不展示)

<template>
  <div>gggg</div>
</template>
...
render() {
    return <div>我收到的</div>;
}

简单的render函数

render:(h) => {
    return h('div',{
      //给div绑定value属性
        props: {
            value:''
        },
        //给div绑定样式
        staticstyle:{
            width:'30px'
        }, 
        //给div绑定点击事件  
        on: {
            click: () => {
                console.log('点击事件')
            }
        },
    })
}    

ts-vue的写法

render() {
    return this.$createelement('div', {
      on: {
        ...this.$listeners,
        click: event => {
          console.log(event);
        },
      },
      props: this.props || {value:''},
      attrs: {
        businessid: this.field.pkid,
      },
      style: {
        width:'30px'
      }
    });
  }
 render() {
    return (
      <thead>
        <tr class="ant-table-thead--extra">
          {this.title}
        </tr>
        {this.$slots.default}
      </thead>
    );
  }

循环构建:

 render() {
    return (
      <acheckboxgroup
        class="checkbox-list"
        value={this.value.map(item => item.id)}
      >
        {this.datalist.map(item => (
          <acheckbox
            key={item.id}
            checked={this.checked(item)}
            value={item.id}
            onchange={$event => this.handlechange($event, item)}
          >
            {item.name}
          </acheckbox>
        ))}
      </acheckboxgroup>
    );
  }

分开定义引用:

render() {
    const triggeraction = (
      <div class="button-list-content--item">
        <span>{this.$t(triggeractionnameenum[this.value.triggeraction])}</span>
      </div>
    );
    const formname = (
      <div class="button-list-content--item">
        <span>{this.value?.triggerdata?.formname || ''}</span>
      </div>
    );
    const updatefields = (
      <div class="button-list-content--item">
        <span class="button-list-content--field" title={this.updatefieldname}>
          {this.updatefieldname}
        </span>
      </div>
    );
    return this.value.triggeraction === triggeractionenum.update ? (
      <div>
        {triggeraction}
        {updatefields}
      </div>
    ) : (
      <div>
        {triggeraction}
        {formname}
      </div>
    );
  }

动态绑定

render() {
    const { setting } = this.data;
    return (
        <div class={this.$style.item}>
          <formcardstyle silhouette={true} type={setting.template} />
        </div>
    );
  }

什么时候使用render

自定义组件的时候。

<script>
    import { component, prop, vue } from 'vue-property-decorator';
    @component()
    class wrap extends vue {
       render() {
         return <div>自定义组件a</div>
       }
    }
    @component()
    export default class formtableactionbar extends vue {
        ...
        render() {
            return (
                <div>
                    <p>下面是自定义组件a</p>
                    <wrap></wrap>
                </div>
            )
        }
    }
</script>

到此这篇关于vue render函数使用详细讲解的文章就介绍到这了,更多相关vue render函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com