前言
Vue推荐在绝大数情况下使用模板来创建HTML,然后一些特殊的场景,你真的需要JavaScript的完全编程的能力,这个时候你可以使用渲染函数 ,它比模板更接近编译器;
h()函数是什么
Vue在生成真实的DOM之前,首先会将节点转换成VNode,而VNode组合在一起形成一颗树结构,就是虚拟DOM(VDOM),最后VDOM才渲染成真实的DOM;
如果我们直接编写生成vnode的代码,那效率会更高,这里就是h()函数。h函数也可以称为createVnode函数,用于创建 vnode 的一个函数;
h()函数怎么用
h函数 接收三个参数。 例:()=>h('h1',{class="classsNmae"}, '大家好!')
第一个: 可以为一个html标签,一个组件,一个异步组件,或者是一个函数式组件。
第二个:{ Object } Props,与attributes和props,以及事件对应的对象,我们可以在模板中使用,如果没有需要传入的属性,可以设置为null。
第三个:{String | Object |Array}可以是字符串Text文本或者是h函数构建的对象再者可以是有插槽的对象。
代码例子:
{label: t('components.SubTaskDetail.5q09prnzux41'),value: dataCheckDetail? h('div',null,h('div', { class: 'desc-value-row' }, [h('div',null,t('components.SubTaskDetail.5q09xhsvcq44', {totalDataSize: dataCheckData.value?.total || 0,totalRowCount: dataCheckData.value?.totalRows || 0,totalTableCount: dataCheckData.value?.tableCount || 0,totalTableFinishCount:dataCheckData.value?.completeCount || 0})),h('div',{ class: 'arco-tag arco-tag-checked speed-tag' },t('components.SubTaskDetail.5q09xhsvcq45', {avgSpeed: dataCheckData.value?.avgSpeed || 0}))])): t('components.SubTaskDetail.5q09prnznzg0'),span: 5}// "5q09prnzux41": "数据校验:",
// "5q09xhsvcq44": "数据总量:{totalDataSize}MB,数据总行数:{totalRowCount}行,数据总表数:{totalTableCount}张,已完成表数:{totalTableFinishCount}张",
// "5q09xhsvcq45": "平均校验速率:{avgSpeed}MB/s"//:deep深度选择器:deep(.desc-value-row) {display: flex;align-items: center;}:deep(.speed-tag) {margin-left: 50px;}
效果: