reactjs - React Context提供不将值传递给消费者
问题描述
我有以下提供,其中包含身份验证状态。
export const AuthenticationContext = React.createContext();
export default class AuthenticationProvider extends React.Component {
state = {
isAuthenticated: false
};
render() {
return (
<AuthenticationContext.Provider value={{ state: this.state }}>
{this.props.children}
</AuthenticationContext.Provider>
);
}
}
我将其包装到我的路线中,如下所示:
<Provider store={store}>
<ConnectedRouter history={history}>
<>
<GlobalStyle />
<AuthenticationProvider>
<SiteHeader />
<ErrorWrapper />
<Switch>
<PrivateHomeRoute exact path="/" component={Home} />
<Route exact path="/login" component={LoginPage}
</Switch>
</AuthenticationProvider>
</>
</ConnectedRouter>
</Provider>
<SiteHeader />
但是当我试图将上下文状态放入Context.Provide
. 我的消费者在里面<SiteHeader />
是:
class SiteHeader extends React.Component {
render() {
return (
<div>
<AuthenticationContext.Consumer>
{context => (
<header>this is header {context.state.isAuthenticated}</header>
)}
</AuthenticationContext.Consumer>
</div>
);
}
我检查了 React devtools,但它是一样的。Context.Consumer
没有value
来自Provider
.
解决方案
如果值为 false、null 或未定义,则不会呈现。我在这里的沙箱中尝试了您的代码。只是在头中添加了 .toString() ,并且布尔值显示在头中。
推荐阅读
- node.js - 运行在 Windows 上为我的树莓派创建的节点 Web 应用程序时出错
- python-3.x - Tkinter 使按钮比预期的要大
- javascript - 如果此 div 中不仅有文本,还有其他 html 节点(跨度、div ...),我如何获取和设置可编辑 div 中的插入符号位置?
- java - 如何验证弹性搜索中特定索引的快照是否正在进行?
- javascript - 视频编码压缩中HTML5视频的Seek函数和Maximum Keyframe Interval
- php - 用于数据检索的 MySQL 或 JSON
- shell - 以表格格式从 shell 发送电子邮件
- scrapy - 存储来自scrapy dupefilter的过滤请求
- next.js - PurgeCSS 不会从 NextJS 项目中删除未使用的 CSS
- java - 无法解压缩在 scala/java 中使用 Windows“发送到压缩文件夹”创建的文件