我试图理解React的高阶组件结构,但是所有的参考资料都假设您已经理解了在编写:BaseComponent{…this.props}{…this.state}时,spread操作符在高阶组件中的作用。如果组件已经作为道具传入,为什么有必要像这样展开道具?
import React, { Component } from 'react';
const EnhanceComponent = BaseComponent => {
return class EnhancedComponent extends Component {
state = {
name: 'You have been enhanced'
}
render() {
return (
<BaseComponent {...this.props} {...this.state} />
)
}
}
};
export default EnhanceComponent;
简单回答:
传播道具不是强制性的
如果你想保留一个组件的道具,包装后在那里,然后在包装组件中传播道具,否则不要传播它。
例如,你有一个组件,你想增强它:
const Message = props => (
<div className={props.type}>
<p>{props.message}</p>
</div>
)
const EnhancedMessage = enhance(Message);
然后,您可以在代码中的某个地方使用增强组件:
<EnhancedMessage type="alert" message="Something went wrong" />
如果您不传播传递给HOC的道具,那么Message
组件将如何了解传递的道具?
答案在文件中直接解释:
约定:将不相关的道具传递到包装组件HOC向组件添加功能。他们不应该彻底改变合同。从HOC返回的组件应该具有与包装组件类似的接口。
HOC应通过与其特定关注点无关的道具。大多数HOC包含的渲染方法如下所示:
要理解这一点,您应该知道{…this.props}
的作用。就你而言
const EnhanceComponent = BaseComponent => {
return class EnhancedComponent extends Component {
state = {
name: 'You have been enhanced'
}
render() {
return (
<BaseComponent {...this.props} {...this.state} />
)
}
}
};
export default EnhanceComponent;
EnhanceComponent HOC执行一个简单的操作,将状态名称添加到当前呈现的组件中,因此本质上,当您使用此HOC时,您应该能够将原始组件所需的道具直接传递给它,而不是在HOC中使用它们,这就是{…this.props}
扩展语法的目的。您可以阅读此答案以了解有关…
工作原理的更多详细信息
考虑使用简单组件的情况
<MyComponent className='wrapper-container' onClick={this.handleClick} />
定义为
class MyComponent extends React.Component {
render() {
const { className, onClick} = this.props;
...
}
}
如果在这个组件上使用HOC,比如
const EnhancedMyComponent = EnhanceComponent(MyComponent);
你会把它渲染成
<EnhancedMyComponent className='wrapper-container' onClick={this.handleClick} />
现在如果你不写{...this.props}
在你的HOC中,那么MyComponent将不再有class Name
和onClark
作为道具
我指的是这个创建React高阶组件的例子,摘自本文。 我正在努力完全理解 下面是我对上述代码的理解: 我们通过名称定义了一个HOC,它接受一个React组件(BaseComponent)。BaseComponent附带了它的props(称为P),它返回一个新的React组件,该组件接受props P 如何使用此HOC?以下尝试给出了一个打字脚本错误,即传递了太多参数: Modal React组件具
我正在构建一个网页,实现了每个组件共享的通用样式(相同的背景、边框和标题样式)。所以我想我应该制作一个HOC,它接受每个组件的内部内容以及一个标题,并返回一个外部组件,它封装了这个内部组件和标题。起初,我在尝试让它发挥作用时遇到了很多问题,因为我是一个新的反应者,但现在它终于起作用了,但我仍然不明白怎么做。 这是我的HOC 这是WrappedComponent: 这是ListsComponent
在react中,您可以设置进入组件的道具的道具类型。对于我的一个道具,我希望值为null或一行JSX。React文档没有涵盖JSX应该使用的propType。 在测试时,我发现它在使用对象或元素的propTypes时不会抛出错误。当使用另一个符号(如符号)时,我会得到一个错误,表示它是一个对象。如果它是一个对象,当它是一个元素时,它肯定会抱怨。 JSX的正确类型是什么?
我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。
状态保存在MyPayments组件中(它是本地状态--尽管您可以看到连接的组件,但我几乎不使用Redux)。 它具有以下结构: 数组作为道具传递给子组件(连接的)-您可以在上面的屏幕截图中看到它。我认为连接的组件将它进一步传递到组件。但是...
本文向大家介绍React.js中的高阶组件,包括了React.js中的高阶组件的使用技巧和注意事项,需要的朋友参考一下 高阶部分简称为hoc。这是一种接收组件并返回具有附加功能的新组件的模式。 // hoc是自定义JavaScript函数的名称 我们使用带有状态和/或道具的组件来构建UI。hoc用类似的方法从提供的组件中构建一个新组件。 使用hoc在React中成为一个横切关注点。这些组件将负责单