Vue 函数式组件
最近学习过程中用到了 Vue 的函数式组件,发现网上相关的资料很少。而在 Vue 3 中函数式组件也不再被推荐使用,这里简单记录下使用函数式组件的一些场景和用法。
Vue 函数式组件是没有状态(没有响应式数据),也没有实例(没有 this 上下文)。
基于模版的函数式组件
1 2 3 4 5 6 7 8 9 10 11 12
| <template functional> <div> ... </div> </template> <script> export default { props:{ someProp:String } } </script>
|
函数式组件
1 2 3 4 5 6 7 8
| <script> export default { functional:true, render(h){ //... } } </script>
|
在函数式组件 template 中使用 Vue 原型上的属性
1 2 3 4 5
| <template functional> <div> {{parent.$route.params.id}} </div> <template/>
|
在函数式组件中使用 methods 或 computed
可以使用 Vue 提供的 $options 属性来调用我们自定义的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <template functional> <div> {{$options.userFullName(props.user)}} </div> </template> <script> export default { props:{ user:Object }, userFullName(user){ return `${user.firstName} ${user.lastName}` } } </script>
|
何时使用函数式组件
- 显式逻辑特别简单的组件,也叫哑组件。比如按钮、卡片、标签甚至纯静态的“关于”页面等
- 一个被用来包裹模板置标或丰富其他组件基础功能的高阶组件
- 每当你发现自己陷入了一个循环渲染 (v-for),其遍历对象往往就适用函数式组件
参考