javascript - 反应 | 多语境 | 无法使用默认值
问题描述
我正在尝试在 React 16.4 中发布的新上下文 API。当我使用多个上下文时,我被卡住了,无法使用 Providers 的默认值,但是在 Single Contexts 的情况下,消费者能够接收 Providers 的默认值。
语境 :
const ThemeContext = React.createContext("light");
const UserContext = React.createContext({ name: "Guest" });`
提供者
<ThemeContext.Provider>
<UserContext.Provider>
<Main />
</UserContext.Provider>
</ThemeContext.Provider>
消费者:
<ThemeContext.Consumer>
{theme => (
<UserContext.Consumer>
{user => <ProfilePage user={user} theme={theme} />}
</UserContext.Consumer>
)}
</ThemeContext.Consumer>
请找到沙盒链接:https ://codesandbox.io/s/6w8qn7yy4k
谢谢。
解决方案
根据反应文档:
仅当 a在树中没有匹配项
defaultValue
时才使用该参数。Consumer
Provider
// context
const ThemeContext = React.createContext("light");
const UserContext = React.createContext({ name: "Guest" });
function Content() {
return (
<ThemeContext.Consumer>
{theme => <ProfilePage theme={theme} />}
</ThemeContext.Consumer>
);
}
class App extends React.Component {
render() {
return (
<UserContext.Provider>
<Main />
</UserContext.Provider>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
上面的代码没有 ThemeContext 的提供者,因此它采用默认值。
如果您同时使用这两个提供者,则需要向所有提供者提供价值,例如
<ThemeContext.Provider value={"light"}>
<UserContext.Provider value={{ name: "Guest" }}>
<Main />
</UserContext.Provider>
</ThemeContext.Provider>
推荐阅读
- angular - 为什么 apollo client:codegen 不生成类型?
- terraform - Terraform 使用“for_each”创建多个网络接口并引用“azurerm_public_ip”
- css - 如何在范围滑块内显示值?
- c# - Linq - 将 1 个查询的结果集与另一个表连接
- linux - bash -c 不设置 $? 正如预期的那样
- python - 从 TensorFlow 数据集中拆分数据的问题
- swift - 我想将 Xcode 中的文件附加到电子邮件中
- android - ACTION_CHOOSER 与 ACTION_VIEW 意图(打开与打开...)
- php - 通过 sqlite 插入数据时 Laravel 中的 PHP 错误
- c# - SIM800L从c#向arduino发送数据的问题