【发布时间】:2019-02-10 20:17:59
【问题描述】:
我有两个向组件添加上下文的 HOC,如下所示:
const withContextOne = Component => class extends React.Component {
render() {
return (
<ContextOne.Consumer>
{context => <Component {...this.props} one={context} /> }
</ContextOne.Consumer>
);
}
};
export default withContextOne;
期望的结果
我只是想要一种语法简洁的方式来用这个 HOC 包装一个组件,这样它就不会对我的 JSX 结构产生太大影响。
我尝试过的
- 导出附加了 HOC 的组件
export default withContextOne(withContextTwo(MyComponent))这种方式最简洁,但不幸的是它破坏了我的单元测试。 -
尝试从 JSX 中评估 HOC,例如:
{ withContextOne(withContextTwo(<Component />)) }这给我一个错误说
函数作为 React 子级无效。如果您从渲染返回一个组件而不是 ,则可能会发生这种情况。
-
在渲染之前创建一个变量来存储 HOC 组件:
const HOC = withContextOne(Component)
然后简单地使用<HOC {...props}/> 等进行渲染。我不喜欢这种方法,因为它会更改我的 JSX 中组件的名称
【问题讨论】:
-
尝试装饰器?
-
@DanielLizik 非常好,如果您发布答案,我会接受 - 使用装饰器方法谢谢。
标签: reactjs