【发布时间】:2019-06-13 00:10:34
【问题描述】:
我正在尝试学习 Context API,我想要实现的是在我的标题中显示登录用户,以及根据登录状态操作我的菜单选项(存储 ' 是否安全? isAuthenticated' 状态?)
我的上下文类:
import React from 'react';
const Context = React.createContext();
export class Provider extends React.Component {
state = {
isAuthenticated: true,
user: {
name: "Joe Smith",
email: "joe.smith@here.com"
}
}
render() {
return (
<Context.Provider value={this.state}>
{this.props.children}
</Context.Provider>
)
}
}
export const Consumer = Context.Consumer;
所以,非常基本。设置一个状态,稍后在一些子组件中,我想显示chaps名称。
我的 App.js 是使用“提供者”,因此我的所有组件都可以访问这些数据:
import React from 'react';
import { HashRouter , Route, Switch } from 'react-router-dom';
import Home from './components/home';
import Header from './components/header';
import Accounts from './components/accounts';
import Reports from './components/reports';
import Login from './components/login';
import {Container} from 'reactstrap';
import { Provider } from './context';
function App() {
return (
<div className="App">
<Provider>
<HashRouter>
<Header />
<Container>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/accounts" component={Accounts} />
<Route exact path="/reports" component={Reports} />
<Route exact path="/login" component={Login} />
</Switch>
</Container>
</HashRouter>
</Provider>
</div>
);
}
export default App;
所以在这种情况下,“标题”需要访问我的上下文。 我的标题将显示一个菜单(根据我将添加到上下文中的一些信息,它将显示或隐藏选项、登录按钮等)。
在菜单下,我想显示一个小的信息栏。例如,登录用户名。所以,我的头类看起来像这样:
import React from 'react';
import Menu from './menu';
import InfoBar from './infobar';
import { Consumer } from '../context';
class Header extends React.Component {
render() {
const menuStyle = {
paddingBottom: "5px"
}
return(
<Consumer>
<div style={menuStyle}>
{value => {
console.log(value);
return (
<h1>Test</h1>
)
}}
<Menu />
<InfoBar />
</div>
</Consumer>
)
}
}
export default Header;
但问题现在发生了。当我运行我的代码时,它会编译并运行,但马上就会出现运行时错误:
TypeError:render 不是函数 updateContextConsumer C:/Storage/Scratch/ReactApp/accufinance/node_modules/react-dom/cjs/react-dom.development.js:16082
我阅读了一些关于退货和多个孩子的信息,但我的代码似乎没有这个问题。任何有助于理解问题和问题发生的地方都会很棒。如果我注释掉'header'中的代码,没有错误......但是......也没有屏幕。它似乎正在该地区发生。
【问题讨论】:
标签: javascript reactjs