nickola105
@nickola105
начинающий

Функция не видет обновление стейта Reacta?

Ребятушки всем привет.
Такая чтука есть функция которая меняет стейт сласса а за ней вызывается следущая, так вот эта следущая берез значение старого стейта. как это поравить?
првая функция
onSortChange = (column) => {
    const type = column.desc ? 'asc' : 'desc';
    this.setState({columnId: column.id})
    this.props.sortColumn(column.id, type);
    this.props.onSubmit(0, this.state.pageSize, false, column.id, type)
    console.log(this.state.columnId)
  };

вторая
fetchData = (state) => {
    const { data, onSubmit } = this.props;
    const { pageSize, pages, columnId } = state;
    this.setState({totalPages: pages});

    if (data.tableData.length < data.total) {
      onSubmit(data.tableData.length, pageSize, true)
    }
  };

не видит новую columnId
Помгите пожалуйста
  • Вопрос задан
  • 400 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега React
Метод setState - асинхронный. Хотите какие-то действия выполнять после изменения стейта - выполняйте их в колбеке:

this.setState(newState, () => {
  // вот здесь
})
Ответ написан
rockon404
@rockon404 Куратор тега React
Frontend Developer
setState - ассинхронная функция. Можно использовать колбек:
this.setState({
  columnId,
}, this.fetchData);

но это не лучшее решение с точки зрения архитектуры, если вам надо вызывать fetchData по изменению разных частей state (пагинация, сортировка, количество элементов на странице и пр.).
В этом случае fetchData лучше вызывать в componentDidUpdate:
componentDidUpdate(_, prevState) {
  if (prevState.columnId !== this.state.columnId) {
    this.fetchData();
  }
}

Так все условия вызова fetchData по изменению состояния будут находиться в одном месте. Вместо кучи колбеков по функциям компонента. Но если собираетесь дергать только по onSortChange, то можно вызывать fetchData в колбеке setState.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Torin_Asakura
@Torin_Asakura
Lead Architect
А откуда onSortChange и fetchData вызывается?
Ну и setState и props.sortColumn асинхронны...
Ответ написан
Ваш ответ на вопрос

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

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