Vue之Render函数出入茅庐

最近做后台管理系统用到了iview的自定义table,但是不满足于需求,于是,利用render函数进行一番整改。
一、介绍:
首先介绍一下render函数,Vue一般使用template来创建HTML,render函数就是用JavaScript来创建html。
(1):举例:同样一段html,用render函数来实现它:

<div>我是一个div容器></div>
render :createElement => {
	return createElement('div','我是一个div容器')
}

二、虚拟DOM
Vue通过建立一个虚拟DOM对真实DOM发生的变化进行跟踪:

return createElement('div', this.status)

createElement 到底会返回什么呢?官方说法:“ 其实不是一个实际的 DOM 元素。它更准确的名字可能是 createNodeDescription,因为它所包含的信息会告诉 Vue 页面上需要渲染什么样的节点,及其子节点。我们把这样的节点描述为“虚拟节点 (Virtual Node)”,也常简写它为“VNode”。“虚拟 DOM”是我们对由 Vue 组件树建立起来的整个 VNode 树的称呼。” 所谓虚拟DOM,说白了就是我们用js创建的一个标签或者组件。

三、createElement 参数
(1):createElement接收三个参数:

  • HTML标签名,组件或者函数,是必填的;
  • 标签属性{object},可选
  • 标签内容:可以是string或者Array,如果创建多个子节点:[createElement(‘div’),createElement(‘p’),createElement(‘button’)]

(2):总结:createElement(标签,标签属性,标签内容)
基本用法div:

render: createElement => {	
   return createElement('div',{
   	// 为每个h标签设置class
           'class': {
             foo: true,
             bar: false
           },
           // 最终被渲染为内联样式
           style: {
             color: 'red',
             fontSize: '14px'
           },
           // 其他的html属性
           attrs: {
             id: 'foo',
             'data-id': 'bar'
           },
           // DOM属性
           domProps: {
             // innerHTML: 'from domProps',
           },
           // 事件监听器基于 "on"
           on: {
             click: this.commit()
           },
   },'我是一个div')
}

基本用法input:

render: createElement =>{
	return createElement('input',{
		domProps:{
                  value:this.value,// value赋值
                  placeholder:'请填写内容'
                },
                style: {
                    marginLeft: '5px',
                    display:!this.status ? 'none' : '',
                    border:'1px #515a63 solid'
                  },
                on :{
                	// 原生一系列:keyup/keydown/keypress/focus/blur/mouseover/mouseout/
                	keyup: event => {
                		if (event.keyCode == 13 && event.target.value.trim()){
                			// 提交输入的值
                			this.commit(event.target.value)
                		}
                	}
                }
	})
}

基本用法Array:

render:(createElement,params) =>{
              return createElement('div',{
                style:{
                  padding:'10px 0'
                }
              },[
                createElement('p','会员姓名:' + params.row.userName),
                createElement('p','会员性别:' + params.row.userSex),
                createElement('p','手机号码:' + params.row.userPhone),
                createElement('p',{
                  style:{
                    marginBottom:'5px'
                  }
                },`身份证号:${params.row.userIdNumber}`),
                createElement('p',`银行卡号:${params.row.bankcardNo}`),
                createElement('p',`开户银行:${params.row.bankcardBankName}`),
                this.status ? createElement('p',`会员转账备注:${params.row.detailTransferMemo}`) : ''
             	 ]
              )
            }

下一篇讲render函数怎么实现v-if/v-else、v-model、自定义指令、ref等等
查看文章

API
渲染函数 & JSX

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小小白zyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值