探索Vue高阶组件的使用

2020-06-16 06:24:45易采站长站整理
中的高阶组件,看下面的
React
代码:


function WithConsole (WrappedComponent) {
return class extends React.Component {
componentDidMount () {
console.log('with console: componentDidMount')
}
render () {
return <WrappedComponent {...this.props}/>
}
}
}

WithConsole
就是一个高阶组件,它有以下几个特点:

1、高阶组件(

HOC
)应该是无副作用的纯函数,且不应该修改原组件

可以看到

WithConsole
就是一个纯函数,它接收一个组件作为参数并返回了一个新的组件,在新组件的
render
函数中仅仅渲染了被包装的组件(
WrappedComponent
),并没有侵入式的修改它。

2、高阶组件(

HOC
)不关心你传递的数据(
props
)是什么,并且被包装组件(
WrappedComponent
)不关心数据来源

这是保证高阶组件与被包装组件能够完美配合的根本

3、高阶组件(

HOC
)接收到的
props
应该透传给被包装组件(
WrappedComponent
)

高阶组件完全可以添加、删除、修改

props
,但是除此之外,要将其余
props
透传,否则在层级较深的嵌套关系中(
这是高阶组件的常见问题
)将造成
props
阻塞。

以上是

React
中高阶组件的基本约定,除此之外还要注意其他问题,如:高阶组件(
HOC
)不应该在
render
函数中创建;高阶组件(
HOC
)也需要复制组件中的静态方法;高阶组件(
HOC
)中的
ref
引用的是最外层的容器组件而不是被包装组件(
WrappedComponent
) 等等。

Vue 中的高阶组件

了解了这些,接下来我们就可以开始着手实现

Vue
高阶组件了,为了让大家有一个直观的感受,我仍然会使用
React
Vue