SetState не обновляет состояние

почему this.setState не работает.

constructor(props) {
 super(props);
 this.state  = {
    obj: [],
 }
 }
 ,


componentDidUpdate(prevProps){
const { obj } = this.props;
  this.setState({obj});
}
}

попробуйте журнал консоли this.props.siteDataState

meda 18.12.2018 20:20

Никогда не используйте setState безоговорочно в componentDidUpdate.

Prakash Sharma 18.12.2018 20:22

Нет опоры siteDataState

andy mccullough 18.12.2018 20:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
63
1

Ответы 1

Если вы посмотрите на консоль разработчика, вы увидите ошибку, когда предполагается, что журнал консоли должен произойти, потому что вы используете «нормальную» функцию без какого-либо сохранения 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.

конечно, но это не работает для меня, вы можете протестировать без обратного вызова, я использую обратный вызов только для данных отладки, мне нужно обновить статистику

Ali 18.12.2018 20:28

Так что выполните базовую отладку: докажите себе, что this.props имеет контент, который вы можете извлечь, просто сделав componentDidUpdate одной строкой кода: console.info(this.props). Имеет ли он вообще то значение, которое вы пытаетесь восстановить? (Кроме того, если вы уже получили это как опору, зачем вы вообще добавляете его в состояние? Просто укажите this.props.siteData вместо this.state.siteDataState. Нет веских причин для его повторной привязки)

Mike 'Pomax' Kamermans 18.12.2018 20:33

Другие вопросы по теме