#reactjs #local-storage
#reactjs #локальное хранилище
Вопрос:
Я получаю undefined
при извлечении user.firstName
. Пожалуйста, дайте мне знать, что здесь не так. Спасибо.
class UserBlock extends Component {
render() {
const user = JSON.parse(localStorage.getItem("user"));
return (
<div>{user.firstName}</div>
);
}
}
Я могу получить user
объект в консоли, как показано ниже:
{ id: 1, username: 'admin', password: 'admin', firstName: 'Admin', lastName: 'User', role: 'Admin' }
Комментарии:
1. можете ли вы опубликовать, что возвращает ваш
user
const при выходе из системы? и бит, в котором вы также устанавливаете его в localStorage2. когда я печатаю user, я могу получить полный объект { id: 1, имя пользователя: ‘admin’, пароль: ‘admin’, Имя пользователя: ‘Admin’, фамилия: ‘User’, роль: Admin}
3. можете ли вы показать код того, как вы сохраняете пользователя в localstorage?
4. Похоже на состояние гонки: компонент отображается раньше, чем (авторизованный) пользователь сохраняется в локальном хранилище. Рассмотрите возможность создания минимального примера, который будет воспроизводить ошибку.
Ответ №1:
Попробуйте выполнить следующее
class UserBlock extends Component {
constructor(){
const user = JSON.parse(localStorage.getItem("user"));
this.state = {
user
};
}
render() {
const { user } = this.state
return (
<div>{user.firstName}</div>
);
}
}
Ответ №2:
Используйте функцию жизненного цикла componentDidMount (), она выполняет работу до того, как браузер обновит экран. (даже асинхронные вызовы). подробнее об этом здесь
componentDidMount = () => {
let user = JSON.parse(localStorage.getItem("user"));
this.setState({user: user})
}
render() {
const { user } = this.state
return (
<div>{user.firstName}</div>
);
}
}