reactjs - 在 React 组件中交换 React 上下文
问题描述
想象一下,您构建了 Context A 和 React 组件 1 和 1.1,其中后一个组件是前者的子组件。一切都很完美。
现在您构建上下文 B 并希望将组件 1.1 与它一起使用。鉴于在组件 1.1 中您可能访问了上下文 A(即利用上下文的强大功能来避免道具钻探),有没有办法以某种方式修改某些内容,以使组件可以同时与上下文 A 和上下文 B 一起使用?
我正在考虑/希望有某种方法可以动态指定要使用的上下文,而不是对其进行硬编码。
解决方案
至少对于较新版本的 React,您可以使用useContext
钩子轻松使用多个上下文。
import { ContextA } from 'wherever/a';
import { ContextB } from 'wherever/b';
const Child = ({condition}) => {
let valueA = useContext(ContextA);
let valueB = useContext(ContextB);
return (
<div>Got {condition ? valueA : valueB}</div>
);
}
render(
<ContextA.Provider value={something}>
<ContextB.Provider value={something}>
<Child />
<ContextB.Provider />
<ContextA.Provider />
);
推荐阅读
- angular-cli - 在 Angular 中为 node_modules 获取 ENOENT 错误
- android - 我无法使用 adb shell 获取活动名称
- postgresql - 将本地 postgresql 复制到 AWS RDS
- ibm-mq - 什么是典型的渠道:amqrmppa 比率?
- vue.js - VueJS 输入数字并在按钮上单击重定向以链接输入数字
- c# - 已解决 - 协程在 WebGL 中的行为异常
- perl - big sur 上的 mytop 在操作系统更新后停止工作
- python - 使用日期时间索引在 pandas DataFrame 中选择日期之前的第一条记录的简洁方法
- c++ - 在以函数为参数的模板化函数中提取输入参数的类型
- sqlite - SQLite error. My query throws an error saying a column does not exist