我似乎无法理解为什么高阶组件比常规组件更受重视?我读了一篇关于它们的教程,得知高阶组件之所以好是因为:1)允许代码重用、逻辑和引导抽象。2)能够进行渲染劫持。3)可以抽象出状态并对其进行操作。4)能够操作props。来源:链接
其中一个高阶组件的代码示例如下:
function refsHOC(WrappedComponent) {
return class RefsHOC extends React.Component {
proc(wrappedComponentInstance) {
wrappedComponentInstance.method()
}
render() {
const props = Object.assign({}, this.props, {ref: this.proc.bind(this)})
return <WrappedComponent {...props}/>
}
}
}
这段代码几乎和一个接收props的普通类定义完全相同,你仍然可以在该类内部“操作props”和“操作state”
class Something extends React.Component {
constructor(props) {
super(props);
this.state = { food: 'no_food_received_yet' }
}
componentDidMount() {
this.setState({ food: 'apple' });
}
render() {
return (
<div>
<p>{ this.state.food }</p>
<h2>{ this.props.food }</h2>
</div>
);
}
}
实际上,我没有操作或更改props的能力,但我可以接收它们,将它们应用于状态并输出该状态。
这并不是对高阶组件的抨击 - 实际上恰恰相反。我需要理解我错在哪里以及为什么应该将高阶组件集成到我的React应用程序中。