Создание контекста
export default React.createContext({
user:null,
login:()=>{}
})
Контроллер контекста
export default class ContextHandler extends Component{
state = {
user: null,
}
logout = () => {
this.setState({
user: null
})
}
login = user => {
this.setState({
user: user
})
};
render(){
return(
<AuthContext.Provider value = {{ user: this.state, login: this.login, logout: this.logout }} >
{this.props.children}
</AuthContext.Provider>
)
}
}
App.js
class App extends Component{
render() {
return (
<BrowserRouter>
<div>
<Switch>
<Route path = "/" exact component = {Header} />
<Route path = "/login" exact component = {Login} />
<Route path = "/profile" exact component = {UserProfile} />
<Route path = "/inputform" exact component = {InputForm} />
</Switch>
</div>
</BrowserRouter>
)
}
}
export default App;
index.js
ReactDOM.render((
<ContextHandler>
<App/>
</ContextHandler>
),
document.getElementById('root'));
registerServiceWorker();
Страница профиля пользователя
componentDidMount() {
if (!this.context.user) {
return ( <Redirect to = "/login"/> )
}
else{
this.setState({
loading:true
})
getUserEntries(this.context.user.token,(entries)=>{
if (entries !== null){
this.setState({
userEntries:entries
})
}
})
}
}
render() {
let samples, producers
if (!this.context.user){
return(
<Redirect to = "/login"/>
)
}
if (this.state.userEntries) {
samples = (this.buildList(this.state.userEntries.samples))
producers = (this.buildList(this.state.userEntries.producers))
}
Как только я вхожу в систему, я попадаю на страницу пользователя с правильным контекстом. Когда я перехожу на другую страницу и пытаюсь вернуться на страницу профиля пользователя, контекст теряется. и мне нужно снова войти в систему ??
Единственные два компонента, использующие контекст, - это панель навигации и страница профиля пользователя. Примечание: я использую новый API контекста 16.6, т.е. в рендере нет потребительских тегов.
Либо я нажимаю на вариант навигации, который использует маршрут для загрузки другой страницы, либо просто меняю URL-адрес для изменения страниц.
что вы имеете в виду под the context is lost? означает ли это, что ценность пользователя потеряна? Вы можете показать нам свой компонент UserProfile?
Состояние установлено на null, как будто я никогда не входил в систему.
Вы когда-нибудь находили решение этой проблемы?
@prestonsmith Да, я добавил файлы cookie в свое приложение. Единственная причина заключалась в том, что все дерево DOM перестраивалось на моем локальном хосте. (ошибка новичка)
Можете ли вы детально проработать решение abit, так как я тоже здесь застрял





Что здесь означает
navigate? В вашем приложении или полностью обновите страницу?