如何让 HOC 对覆盖道具做出反应?
How to get HOC in react to override props?
我在 HOC 上的支持似乎没有压倒一切。我觉得好像这可能是我正在使用的符号。这是我现在拥有的。
export const HOCComponent = ({ someProp }) => (
<ContainerComponent
propOne={someValueOne}
propTwo={someValueTwo}
propThree={someValueThree)
/>
);
export const wrapperComponent = props =>(
<HOCComponent {...props} propThree={someValueFour}/>
);
someValueFour
似乎没有覆盖 someValueThree
。任何建议都会非常有帮助!谢谢。
交换传递的道具的顺序,这样你以后传递的任何东西都会覆盖以前传递的任何东西。
export const wrapperComponent = props =>(
<HOCComponent propThree={someValueFour} {...props} />
);
HOCComponent
包装器组件还需要将所有 props 传递给它所包装的组件。
export const HOCComponent = (props) => (
<ContainerComponent
propOne={someValueOne}
propTwo={someValueTwo}
propThree={someValueThree}
{...props}
/>
);
只是关于术语的 次要 点,您的代码片段中没有任何内容是高阶组件。 HOC 使用一个 React 组件和 return 一个新的 React 组件。
一个例子:
const withMyHOC = WrappedComponent => props => {
// any HOC logic
return (
<Wrapper
// <-- any wrapper props
>
<WrappedComponent
{...props} // <-- pass props through
// <-- override any props
/>
</Wrapper>
);
};
用法:
export default withMyHOC(SomeComponent);
我看到你没有将道具从 HOCComponent
传递到 ContainerComponent
,所以 propThree
没有被覆盖。您需要将 someProp
传递给 ContainerComponent
:
<ContainerComponent propOne propTwo propThree {...someProp} />
我在 HOC 上的支持似乎没有压倒一切。我觉得好像这可能是我正在使用的符号。这是我现在拥有的。
export const HOCComponent = ({ someProp }) => (
<ContainerComponent
propOne={someValueOne}
propTwo={someValueTwo}
propThree={someValueThree)
/>
);
export const wrapperComponent = props =>(
<HOCComponent {...props} propThree={someValueFour}/>
);
someValueFour
似乎没有覆盖 someValueThree
。任何建议都会非常有帮助!谢谢。
交换传递的道具的顺序,这样你以后传递的任何东西都会覆盖以前传递的任何东西。
export const wrapperComponent = props =>(
<HOCComponent propThree={someValueFour} {...props} />
);
HOCComponent
包装器组件还需要将所有 props 传递给它所包装的组件。
export const HOCComponent = (props) => (
<ContainerComponent
propOne={someValueOne}
propTwo={someValueTwo}
propThree={someValueThree}
{...props}
/>
);
只是关于术语的 次要 点,您的代码片段中没有任何内容是高阶组件。 HOC 使用一个 React 组件和 return 一个新的 React 组件。
一个例子:
const withMyHOC = WrappedComponent => props => {
// any HOC logic
return (
<Wrapper
// <-- any wrapper props
>
<WrappedComponent
{...props} // <-- pass props through
// <-- override any props
/>
</Wrapper>
);
};
用法:
export default withMyHOC(SomeComponent);
我看到你没有将道具从 HOCComponent
传递到 ContainerComponent
,所以 propThree
没有被覆盖。您需要将 someProp
传递给 ContainerComponent
:
<ContainerComponent propOne propTwo propThree {...someProp} />