#javascript #reactjs #react-redux #react-hooks #react-context
Вопрос:
я использую контекст реакции, чтобы поделиться именем пользователя между компонентами. У меня Есть 3 страницы: -app.js -Вход(где имя пользователя изменено) -страница 1(где я хочу увидеть обновленное имя пользователя)
Я сделал именно так, как сказано в этом уроке(и во многих других видео): https://codingshiksha.com/react/react-js-usecontext-hook-login-user-and-storing-it-example-tutorial-for-beginners-2020/
В моем app.js я определил состояние следующим образом:
const [user, setUser] = useState();
return (
<Router>
<Switch>
<UserContext.Provider value={{user,setUser}}>
<Route path="/page1">
<page1 />
</Route>
<Route path="/SignIn">
<SignIn />
</Route>
</UserContext.Provider>
</Switch>
</Router>
На странице входа в систему я обновил имя пользователя следующим образом:
const {user,setUser} = useContext(UserContext);
<TextField
variant="outlined"
margin="normal"
required
fullWidth
id="username"
label="Username"
name="username"
value={user}
onChange={(e) => setUser(e.target.value)}
autoComplete="username"
autoFocus
/>
И я попытался увидеть обновленное значение на странице 1 следующим образом:
const {user} = useContext(UserContext);
console.log(user);
Но как только я загружаю страницу 1, имя пользователя возвращается к значению по умолчанию(на странице входа имя пользователя обновляется).
Кто-нибудь знает, в чем может быть причина этого хеппенса?
мой текстовый файл пользователя:
import React from 'react';
const UserContext = React.createContext(null);
export { UserContext };
(Я попытался поместить тег провайдера за пределы маршрутизатора, но он все равно не работал).
Комментарии:
1. можете ли вы поделиться своей кодовой базой на github или codesandbox.io и поделитесь ссылкой, если вы перезагружаете страницу? при изменении URL-адреса [с, вход на страницу 1], контекст будет сброшен, он не сохраняется при перезагрузке страницы,
Ответ №1:
Похоже, вы проверяете значение, перезагружая страницу для каждого маршрута . Когда вы обновляете, вы создаете совершенно новое приложение . Итак, что вам здесь нужно, так это перемещаться между маршрутами без обновления страницы.
import { .... , Link } from 'react-router-dom'
<UserContext.Provider value={{ user, setUser }}>
<Router>
<Link to="/page1">Page 1</Link>
<Link to='/SignIn'>Sign In</Link>
<Switch>
<Route path="/page1">
<page1 />
</Route>
<Route path="/SignIn">
<SignIn />
</Route>
</Switch>
</Router>
</UserContext.Provider>
Нажмите на ссылку Sign In
изменить значение текстового поля . Теперь нажмите на Page 1
ссылку . Вы должны увидеть, как значение контекста отражается между маршрутами .