javascript - 如何让 HOC 对覆盖道具做出反应?
问题描述
我在 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
所有道具传递给它所包装的组件。
export const HOCComponent = (props) => (
<ContainerComponent
propOne={someValueOne}
propTwo={someValueTwo}
propThree={someValueThree}
{...props}
/>
);
关于术语的小问题,您的代码片段中没有任何内容是高阶组件。HOC 使用一个 React 组件并返回一个新的 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);
推荐阅读
- unity3d - 动画之间的过渡问题
- python - 如何将字典列表序列化为 json 并返回响应?
- geocoding - geocoder.geocode 服务因 REQUEST_DENIED 而失败
- php - php exec() 命令不适用于其他应用程序
- javascript - $.post() 之后的代码在 post-request 完成之前执行
- python - 如何将嵌套列表作为新列添加到现有的熊猫数据框
- titanium - 构建 Appcelerator 项目时出错:无法打包应用程序:错误:检索项目的父项时出错
- c# - 使用 memorystream 将 ICS 作为邮件附件发送
- c# - 如何在 C# 中修改 JSON 数组中的 JSON 对象?
- c++ - 使用 bfs 的主要路径