#javascript #html #reactjs #react-redux #react-router
#javascript #HTML #reactjs #реагировать-redux #реагировать-маршрутизатор
Вопрос:
Я перепробовал все ответы, которые смог найти, это мой маршрут:
const loggedIn = !!localStorage.getItem('token');
const Routes = () => (
<div>
<Switch>
<Route exact path="/" render={() => (
!loggedIn ? (
<Redirect to="/login" />
) : (
<Redirect to="/welcome" />
)
)}/>
</Switch>
</div>
);
export default Routes;
Однако он все еще не работает.. Я получаю сообщение об ошибке в другом контейнере:
menuContainer.js: 10 Неперехваченная ошибка типа: не удается прочитать свойство ‘id’, равное null
constructor(props) {
super(props);
this.state = {
userId: JSON.parse(localStorage.getItem('logged')).id,
loginRole: localStorage.getItem('loggedRole')
}
};
Что я здесь делаю не так?
Спасибо!
РЕДАКТИРОВАТЬ: у меня нет никакого идентификатора, если пользователь не вошел в систему. В этом весь смысл. 🙂 Если пользователь не вошел в систему, он должен перенаправить обратно в /login .
Комментарии:
1. можете ли вы сказать нам, что находится в вашем локальном хранилище?
2. Конечно, когда пользователь зарегистрирован, есть идентификатор зарегистрированного пользователя, когда нет, ключа нет.
3. попробуйте
console.log(JSON.parse(localStorage.getItem('logged')))
и проверьте, возвращает ли он null?4.
Routes.js:26 Uncaught TypeError: Cannot read property 'id' of null
5. По умолчанию, если элемент, к которому вы обращаетесь, не существует, он возвращается
null
. Если я это сделаю,JSON.parse(localStorage.getItem('hello'))
он вернетсяnull
. Итак, где и когда вы сохраняете элементtoken
?
Ответ №1:
сначала вам нужно установить элемент в localStorage
localStorage.setItem('name', value )
Ответ №2:
Я не уверен, как вы устанавливали объект localStorage раньше.
var userobj = { id : 12 }
localStorage.setItem('logged',JSON.stringify(userobj))
затем попробуйте получить это как JSON.parse(localStorage.getItem('logged')).id; //return 12
Вот как это нужно сделать. Если token
который вы получаете, имеет идентификатор, вам нужно вручную установить его перед получением 🙂
Комментарии:
1. Но у меня их нет
id
, если пользователь не вошел в систему. В этом весь смысл. 🙂 Если пользователь не вошел в систему, он должен перенаправить обратно на/login
.