почему this.setState не работает.
constructor(props) {
super(props);
this.state = {
obj: [],
}
}
,
componentDidUpdate(prevProps){
const { obj } = this.props;
this.setState({obj});
}
}
Никогда не используйте setState
безоговорочно в componentDidUpdate
.
Нет опоры siteDataState
Если вы посмотрите на консоль разработчика, вы увидите ошибку, когда предполагается, что журнал консоли должен произойти, потому что вы используете «нормальную» функцию без какого-либо сохранения this
. Вместо этого, как только эта функция будет вызвана, идентификатор this
будет ссылаться на глобальный контекст (например, window
), а не на ваш компонент.
Используйте стрелку, чтобы убедиться, что именно this
имел в виду фактически, и вы увидите, что setState
работает нормально:
componentDidUpdate(prevProps){
this.setState({
siteDataState: this.props.siteData
}, () => {
console.info(this.state.siteDataState);
});
}
Тем не менее, это будет каскадный запуск, потому что вы меняете компонент в функции, которая срабатывает при изменении компонента, поэтому поместите туда некоторый код if
, который гарантирует, что this.state.siteDataState
не является уже, что в this.props.siteData
.
конечно, но это не работает для меня, вы можете протестировать без обратного вызова, я использую обратный вызов только для данных отладки, мне нужно обновить статистику
Так что выполните базовую отладку: докажите себе, что this.props
имеет контент, который вы можете извлечь, просто сделав componentDidUpdate
одной строкой кода: console.info(this.props)
. Имеет ли он вообще то значение, которое вы пытаетесь восстановить? (Кроме того, если вы уже получили это как опору, зачем вы вообще добавляете его в состояние? Просто укажите this.props.siteData
вместо this.state.siteDataState
. Нет веских причин для его повторной привязки)
попробуйте журнал консоли
this.props.siteDataState