函数式组件在
React
社区很流行使用,那么在vue里面咱们要怎么用呢html
下面会涉及到的知识点: 高阶函数、状态、实例、vue组件前端
咱们能够把函数式组件想像成组件里的一个函数,入参是渲染上下文(render context),返回值是渲染好的HTMLvue
对于函数式组件,能够这样定义:git
因为函数式组件拥有的这两个特性,咱们就能够把它用做高阶组件(High order components),所谓高阶,就是能够生成其它组件的组件。就像日本的高精度的母机。github
下面示例的完整Demoless
functional: true
加上render function
,就是一个最简单的函数式组件啦,show your the code, 下面就建立一个名为FunctionButton.js
的函数式组件ide
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
来引入上面的函数式组件ui
<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
事件
<template>
<FunctionalButton @click="log">
Click me
</FunctionalButton>
</template>
复制代码
对应的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按钮
上面就是关于函数式组件的基础定义和基本使用了,但愿对大家的学习有帮助。
公司如今急招前端开发,坐标深圳南山,有兴趣的能够看这里,直接把简历发我邮箱吧。teal.yao@corp.to8to.com