vue render jsx 事件绑定 条件渲染 slots 插槽

前文
  • vue中使用 render写一些展示组件

  • 通过实现一个简单的单元 cell 组件, 来了解render jsx 在vue的使用

  • 将 h 作为 createElement 的别名是 Vue 生态系统中的一个通用惯例,实际上也是 JSX 所要求的。从 Vue 的 Babel 插件的 3.4.0 版本开始,我们会在以 ES2015 语法声明的含有 JSX 的任何方法和 getter 中 (不是函数或箭头函数中) 自动注入 const h = this.$createElement,这样你就可以去掉 (h) 参数了。对于更早版本的插件,如果 h 在当前作用域中不可用,应用会抛错。

 render(){
	return (
		
) }
jsx 中 使用 if else 条件判断
  • { } 中判断一个条件是否为真
{ check ? : '' }

ps : check 为真时的效果
在这里插入图片描述
在这里插入图片描述

绑定事件
  • jsx 中绑定事件 可以写原生的事件名 如 onClick 驼峰式 也可以用 ’ - ’ 短线相连 如下
  • 通过 [event.name].bind(this) 绑定事件
{ check ? : '' }
在render 中使用 slot 插槽
  • this.$slots.default 可以获取 slot 传递的内容, vnode
  • 通过 vue中 vnode h() 来渲染
  • 插槽中的元素 可以使用组件的样式命名 或是定义 指定子级样式 使用 * 定义样式
render(h){ 
		const {label, value, check, change}  = this
		return (
			
{label} { this.$slots.default ? h('i', this.$slots.default) :
{value}
}
) }, // less .e-cell--content{ .e-cell--label{ display: inline-block; width: 120px; font-size:28px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:40px; } .e-cell--value,*{ //关于插槽样式 font-style: normal; font-size:24px; font-family:PingFangSC-Regular; font-weight:400; color:rgba(51,51,51,1); line-height:40px; } }
完整代码
//cell组件的样式
import './cell.less'

export default {
	name:'ECell',
	//允许传入的参数
	props:{
		label:{
			type:String,
			default:'T'
		},
		value:{
			type:String,
			default:'(T (共2888点,抵20元))'
		}
	},
	
	data(){
		return {
			check:false,
		}
	},
	//绑定一个事件, 通知是否被点击
	methods:{
		change(){
			this.check = !this.check
			this.$emit('change', {evt:this.label, select: this.check})
		},
	},
	// render  vue官方对 h 的描述 这是一个约定
	render(h){ 
		const {label, value, check, change}  = this
		return (
			
{label} { this.$slots.default ? h('i', this.$slots.default) :
{value}
}
{ check ? : '' }
) }, }
ps: 使用 cell 组件
//局部
	import ECell from '../../lib/cell'
	components:{ECell},
  • value 绑定 和 slot 使用1种即可
	
			{{`(T币 (共${prouctList.cake || 0}币,抵${Number(prouctList.cake || 0) /100}元))`}}
	
  • 效果
    在这里插入图片描述

你可能感兴趣的:(vue,javascript)