Задать вопрос
@cloudz

Почему не перерисовывается компонент?

Есть контейнер TableContainer - содержит данные таблицы, состояние сортировки, обработчики.
И есть компонент Table, отрисовывает данные переданные из контейнера и использует переданные из контейнера обработчики.

TableContainer подключен к редакс.
В componentDidMount TableContainer, происходит запрос за данным по получению которых обновляется redux store.
Данные из редакс стора ложатся в стейт TableContainer (не ложатся почему-то.., но в самом сторе лежат). Если переключиться по роутам, то при обратном заходе на страницу с таблицей, данные подгрузятся как положено (Т.к. в сторе они уже есть).

Стейт TableContainer
state = {
    data: this.props.data, //данные из редакса
    sortParams: {
      column: null,
      direction: null,
    },
  };

  componentDidMount() {
    this.props.fetchTableData(this.props.service);
  }

...


В рендере TableContainer рисуется Table с данными из своего стейта.

render() {
  return <Table data={this.state.data} handlers={handlers}>
}


Проблема в том что при получении данных при первой загрузке не обновляется state TableContainer и соответственно не перерисовывается Table). В сторе данные есть, но стейт TableContainer не обновился и в Table просто передался пустой массив.

Почему такое происходит? В редьюсерах везде возвращаются новые объекты.
  • Вопрос задан
  • 1472 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
rockon404
@rockon404 Куратор тега React
Frontend Developer
1. Вы инициируете загрузку данных после монтирования компонента, а присваиваете состояние до.
2. В вашем случае, вообще не надо хранить данные в состоянии компонента.
3. По изменению параметров фильтрации/сортировки, по-хорошему, должен происходить новый запрос с соответствующими параметрами.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@justadumb
а зачем вы вообще кладете данные из стора в стейт контейнера? передавайте прямо значение из стора
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 80 000 до 120 000 ₽
ITK academy Воронеж
от 50 000 до 90 000 ₽