学习研究vuejs的“函数式组件”:
官网链接:函数式组件
在 2.5.0 及以上版本中,如果你使用了单文件组件,那么基于模板的函数式组件可以这样声明:
<template functional> </template>
但是我用vuejs脚手架搭建的项目,在单页面组件中,render函数压根不运行:
写的测试代码如下:
<template functional>
<div>这是template中写的内容</div>
</template>
<script>
export default {
name: "custome-test-div",
render(createElement,context){
console.log(context);//这里为什么没有运行
return h('div',"这是render函数中写的内容");
}
}
</script>
<style scoped>
</style>
运行结果为:
我在codesandbox上做了一个在线demo:
https://codesandbox.io/s/yqmm...
楼主,你好!函数式组件,它是无状态 (没有响应式数据),无实例 (没有 this 上下文)。所以它的引入就是为了方便开发者定义很逻辑清晰的组件。
vue
单文件里并没有render
方法,因此不会执行。你的例子可以改为这样:
1,传送门
2,传送门
下面摘自官网,可以再详细看下,
在 2.5.0 及以上版本中,如果你使用了单文件组件,那么基于模板的函数式组件可以这样声明:
<template functional>
</template>
组件需要的一切都是通过上下文传递,包括:
props:提供所有 prop 的对象
children: VNode 子节点的数组
slots: 返回所有插槽的对象的函数
data:传递给组件的数据对象,并将这个组件作为第二个参数传入 createElement
parent:对父组件的引用
listeners: (2.3.0+) 一个包含了所有在父组件上注册的事件侦听器的对象。这只是一个指向 data.on 的别名。
injections: (2.3.0+) 如果使用了 inject 选项,则该对象包含了应当被注入的属性。
在添加 functional: true 之后,锚点标题组件的 render 函数之间简单更新增加 context 参数,this.$slots.default 更新为 context.children,之后this.level 更新为 context.props.level。
如有帮助,麻烦点击下采纳,谢谢~