Я пытаюсь изменить состояние фонового изображения при наведении на элемент (значок), но я всегда получаю сообщение об ошибке «TypeError: Не удается прочитать свойство« icon »из undefined», что странно, поскольку значок работает нормально, пока я не наведите это.
Рад, что кто-нибудь мог помочь.
Состояния:
this.state = {
images: {
header: "path to img",
icon: "path to icon"
}
}
Метод:
handleMouseOver = () => {
this.setState({
images: {
header: "new img"
}
});
};
Компонент заголовка, получающий изображение:
<Header bgImg={this.state.images.header} />
Зависший элемент:
<div>
<img onMouseOver={this.handleMouseOver} src={this.state.images.icon} />
</div>
2 ответа
Эта проблема возникает из-за вашей функции onMouseOver
, которая устанавливает новое значение для состояния, но удаляет значок из объекта изображений. Вам нужно запустить следующее:
handleMouseOver = () => {
this.setState((state, props) => {
return {
images: {
header: "new img",
icon: state.images.icon
}
};
});
};
Это потому, что когда вы устанавливаете images
, вы теряете icon
состояние. Попробуйте вот так:
handleMouseOver = () => {
this.setState(prevState => ({
images: {
...prevState.images,
header: "new img"
}
}));
};
Вы используете старый images
, распространяя его, а затем обновляя необходимое свойство. Почему мы используем setState
обратный вызов и prevState
? Потому что, когда мы устанавливаем наше новое состояние, мы зависим от нашего старого состояния.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.