javascript - 从 Consumer -> Provider 上下文传递 prop 并在 Provider 渲染之外访问它?
问题描述
我有一个名为“主页”的组件,它是我网站的主页。这个 Home 组件使用名为“ProductContext”的上下文来访问 data.js 文件中的所有产品。问题是,我的网站的每个页面都将有多个 *data.js 文件,所以我去告诉上下文文件“我在”哪个页面,以便它访问相应的 *data.js 文件。
“家”组件:
class Home extends Component {
state = {
page: "Home",
};
componentDidMount() {}
render() {
return (
<React.Fragment>
<div className="py-2">
<div className="container-fluid">
<Title title="PRODUCTS" className="pl-5" />
<div
className="row no-gutters "
style={{ justifyContent: "center" }}
>
<ProductConsumer page={"Home"}>
{(value) => {
console.log(value);
return value.products.map((product) => {
return <Product key={product.id} product={product} />;
});
}}
</ProductConsumer>
</div>
</div>
</div>
</React.Fragment>
);
}
}
export default Home;
产品上下文:
render() {
return (
<ProductContext.Provider
value={{
...this.state,
handleDetail: this.handleDetail,
addToCart: this.addToCart,
openModal: this.openModal,
closeModal: this.closeModal,
increment: this.increment,
decrement: this.decrement,
removeItem: this.removeItem,
clearCart: this.clearCart,
setPage: this.setPage,
}}
>
{this.props.children}
</ProductContext.Provider>
);
}
}
你可以看出我尝试了一些方法,比如通过 props 或上下文中的函数传递它。我确定我很接近,但我不知道该怎么做。我已经看到了调用 Provider 函数的其他示例,最常见的是使用“onClick”,但这需要在构建或安装 Home 组件或 ProductContext 时发生,以便 Page 组件可以提取正确的数据。我的意思是说:
//In Home Component
componentDidMount() {
let context = this.context;
context.setPage("Home");
}
当然,这不起作用。
解决方案
我对上下文如何工作的理解非常有限。从这次经历中,我想我了解到上下文应该被视为提供数据的东西,而不是获取数据的东西。
我解决了这个问题,首先将上下文中的数据排序到不同的数组中,然后将相应的数组传递给每个页面。
推荐阅读
- php - 将结果拆分为两列并保留字母顺序
- java - 编译错误..无法将类解析为类型
- cordova - Ionic v1 - 播放计费非消耗品购买批准事件在重新启动时自动调用应用程序
- docker - Vue 中的热重载在 Docker 容器中不起作用
- python - TKinter/TTK:可点击区域中的多个元素
- eclipse - Eclipse 错误 - 为 C:\WINDOWS\system32\config\systemprofile 创建目录失败
- jquery - jqGrid 5.5.0 中的错误
- android - ApiException:10:在 com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(com.google.android.gms:play-services-base@@17.1.0:4)
- react-native - 反应原生将实时记录数据转换为可写的base64?
- csv - 使用类和 csv 文件进行转换