函数式组件在
React
社区很流行使用,那么在vue里面我们要怎么用呢
下面会涉及到的知识点: 高阶函数、状态、实例、vue组件
我们可以把函数式组件想像成组件里的一个函数,入参是渲染上下文(render context),返回值是渲染好的HTML
对于函数式组件,可以这样定义:
由于函数式组件拥有的这两个特性,我们就可以把它用作高阶组件(High order components),所谓高阶,就是可以生成其它组件的组件。就像日本的高精度的母机。
下面示例的完整Demo
functional: true
加上render function
,就是一个最简单的函数式组件啦,show your the code, 下面就创建一个名为FunctionButton.js
的函数式组件
export default {
name: 'functional-button',
functional: true,
render(createElement, context) {
return createElement('button', 'click me')
}
}
就像上文所讲的,函数式组件没有this,参数就是靠context
来传递的了,下面我们看下context
有哪些属性呢
props
children
slots
(a slots object)parent
listeners
injections
data
其中上面的data
包含了其他属性的引用,nibility。 在下面的范例中会有具体使用
现在创建一个App.vue
来引入上面的函数式组件
<template>
<FunctionalButton>
click me
FunctionButton>
template>
复制代码
上面的click me
就是FunctionButton.js
的childern
属性了,我们可以把组件改造下,由App.vue
来定义组件的button按钮
export default {
name: 'funtional-button',
functional: true,
render(createElement, { children }) {
return createElement('button', children)
}
}
看,上面用了ES6参数的解构,用{children}
来代替context
函数式组件没有实例,事件只能由父组件传递。下面我们在App.vue
上定义一个最简单的click
事件
对应的FunctionalButton.js
export default {
functional: true,
render(createElement, { props, listeners, children }) {
return createElement(
'button',
{
attrs: props,
on: {
click: listeners.click
}
},
children
);
}
};
对了,createElement
里事件属性就是on
了。具体可以看vue
的官方文档
尤大设计的Api还是很人性的,上面涉及到的props
、listeners
那么多要传递的,是不是很麻烦,所以尤大统一把这个属性集成在data
里了,我们可以再改写下
export default {
functional: true,
render(createElement, { data, children }) {
return createElement( 'button', data, children );
}
};
恩,是不是感觉世界清爽了不少
这就是一个完整的高阶组件了,下面小小的展示一下高阶的魅力。
createElement('button', data, ['hello', ...children])
恩,很简单的就DIY了一个自带hello
的button按钮
上面就是关于函数式组件的基础定义和基本使用了,希望对你们的学习有帮助。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有