#reactjs #react-context
#reactjs #контекст реагирования
Вопрос:
У меня есть приведенное ниже сообщение, которое содержит состояние аутентификации в нем.
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
.
Ответ №1:
Если значение равно false, null или не определено, оно не будет отображаться. Здесь я попробовал ваш код в изолированной среде. Просто добавил .toString() в заголовке, и значение логического значения отображается в заголовке.
Ответ №2:
Контекстные потребители не получают никаких данных в качестве реквизита. вместо этого мы передаем им render prop
, в данном случае дочерние элементы, которые мы передаем, являются функцией render prop. и затем в методе визуализации потребителя происходит что-то вроде этого
render(){
this.props.children(value)
}
вот как мы получаем значение в качестве аргумента функции render prop.
Предполагается, что значение поставщика контекста не должно передаваться через props. Вы можете узнать больше о реквизитах рендеринга здесь
Комментарии:
1. Его потребитель не полагается на props. Это все из параметра context.
2. Его вопрос заключался в том, что Поставщик
value
не передается потребителю в качестве prop. Но это не так, как реагирует. Контекст работает. Я предполагаю, что он путает reander prop с HOC. Хотя я могу ошибаться.3. Да, похоже на это.
4. Пожалуйста, если этот ответ был тем, который вы искали, пожалуйста, примите его, чтобы другие могли легко увидеть, какой ответ правильный на этот вопрос