@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 просто передался пустой массив.

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

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

Войти через центр авторизации
Похожие вопросы