浅谈vue中render函数
官网内容:https://cn.vuejs.org/v2/guide/render-function.html
vue 推荐在绝大多数情况下使模板来创建 HTML 。就是我们都会吧页面的结构写在 template 中,然后再通过 vue 将我们的代码转换成虚拟DOM ,相比对真实DOM ,虚拟 DOM 是通过 js 代码处理的,所以消耗的性能相对较小,当然大部分情况下使用 template 创建我们的 HTML 是可以的;但是在有些场景下,我们真的需要通过 js 的完全编程的能力来完成时,就可以用到 render 函数。
render 函数的作用就是返回一个 虚拟 DOM ,将该虚拟 DOM 渲染成真实的 DOM
基础用法
render: function(createElement){ return createElement() }
// createElement 参数
// 在 createElement 函数中使用模板中的那些功能。这里是 createElement 接受的参数:
createElement(
// {String | Object | Function}
// 一个 HTML 标签名、组件选项对象,或者resolve 了上述任何一种的一个 async 函数。
// 必填项。
'div',
// {Object} 参考 官网文档深入数据对象
// 一个与模板中 attribute 对应的数据对象。可选。
{
attrs: { title: this.title },
// 接受一个字符串、对象,或对象组成的数组
style: { color: 'red', fontSize: '14px' },
},
// {String | Array}
// 子级虚拟节点 (VNodes),由 `createElement()` 构建而成,
// 也可以使用字符串来生成“文本虚拟节点”。可选。
[
'先写一些文字',
createElement('h1', '一则头条'),
createElement(MyComponent, {
props: {
someProp: 'foobar'
}
})
]
)
render 函数有两个参数
export default { name: "yjyRender", props: { row: Object, index: Number, render: Function, }, // render作用:会return一个虚拟dom,return什么该组件就渲染什么 render: (h, ctx) => { // 第二个参数context存储了一些其他组件传过来的数据 // console.log('context', context) const params = { row: ctx.props.row, index: ctx.props.index, }; return ctx.props.render(h, params); // h(标签名/组件,{虚拟dom配置},子集:子虚拟dom,也是虚拟dom节点信息,支持字符串与数组) // return h('h3', { class: 'abc' }, [h('h4', { class: 'abc2' }, '我是h4')]) }, };
第一个参数 h 是 createElement 的缩写,其中有三个参数,在上面已介绍。
第二个参数 context 可以拿到外部组件传进来的数据,如 prop、slots等
render方法的实质就是生成template模板;
render函数生成的内容相当于template的内容,所以使用render函数时,在.vue文件中需要先把template标签去掉。只保留逻辑层。
意思很明白,在脚手架生成的项目中,.vue文件是通过template渲染的虚拟dom,template底层也是使用的render函数。一个组件最终的模板只能有一个,所以如果在项目中(.vue文件)使用render函数,就要去掉template标签;并且你只能作为组件来使用,不可能整个页面都用render函数js手写页面吧~
如此,便解决了我莫大的疑问。
案例参考
https://blog.csdn.net/weixin_45844049/article/details/114277643?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-114277643-blog-121456284.pc_relevant_paycolumn_v3&spm=1001.2101.3001.4242.2&utm_relevant_index=4
https://www.shuzhiduo.com/A/kjdwaQMAJN/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)