vue3的官方文档中并没有提及render函数以及createVNode的疑问?

作者站长头像
站长
· 阅读数 4

很多组件库包括我自己在封装命令式的组件时,都会用到render函数和createVNode函数。

但是vue3的官方文档中并没有提及render函数(注意是函数,不是渲染选项中的render)以及createVNode,以至于自己每次在使用时,都会纠结:到底使用createApp().mount()更合理还是继续使用render配合createVNode(或者h)更合理?从语义的角度出发,我倾向于使用render的方式,但render确实没有在官方文档中提及,只是从源码中得知的,这样用真的合适吗?

回复
1个回答
avatar
test
2024-06-25

阁下是在说这种用法吗。

// createApp(App).mount('#app')
render(createVNode(App), document.querySelector('#app'))

要说好不好使,肯定是好使的(至少CSR是OK的)。但是区别也是明显的,render没有返回值,不像createApp可以返回一个app实例,可以做一些全局的配置,可以做一些组件的注册。

官方文档到底有没有render的描述呢,这里https://vuejs.org/api/custom-renderer.html#createrenderer可能也算是有吧。

那么你都看到这个函数了,想必也是看过源码了:https://github.com/vuejs/core/blob/main/packages/runtime-core/src/renderer.ts#L2355C7-L2355C7

https://github.com/vuejs/core/blob/main/packages/runtime-core/src/apiCreateApp.ts#L348C48-L348C48

render和createApp的关系,备注里有说render是low-level api。

如果使用只是考虑语义,根应用怎么说createApp中的App也更有语义。如果考虑SSR,可能还不能单纯的用render。

所以现在还会纠结吗

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容