Как обновлять элементы внутри состояния асинхронно

У меня такое состояние:

this.state = {
  data: [
    {id: 1212, cat:"cat1"},
    {id: 13123, cat:"cat1"},
    {id: 1212, cat:"cat2"},
    {id: 13123, cat:"cat2"},
    {id: 1212, cat:"cat3"},
    {id: 13123, cat:"cat3"},
    {id: 1212, cat:"cat4"},
    {id: 13123, cat:"cat4"},
    ..
  ]
}

У меня есть идентификаторы и кошка (категории). Все данные динамические, я не знаю, какие идентификаторы и коты будут извлекаться каждый раз.

in the componentDidMount(){
  // I fetch the latest data and sort it based on cat and  `setState` for `this.state.data`
}

in the componentDidUpdate(){
  // I will get the all the unique cats from this.state.data and store it in an array.
  // I will loop over the unique cats and fetch some more data related to each cat. But this will be aynchronous
  // Now how to add the fetched data for each cat at all the places wherever that cat is there in the this.state.data

  // i.e
    i am expecting this.state.data to be
      {
        data: [
          {id: 1212, cat:"cat1", extra:'....'},
          {id: 13123, cat:"cat1", extra:'....'},
          {id: 1212, cat:"cat2", extra:'....'},
          {id: 13123, cat:"cat2", extra:'....'},
          {id: 1212, cat:"cat3", extra:'....'},
          {id: 13123, cat:"cat3", extra:'....'},
          {id: 1212, cat:"cat4", extra:'....'},
          {id: 13123, cat:"cat4", extra:'....'},
          ..
        ]
      }

}

Как добавить новое свойство к данным на основе этой конкретной кошки асинхронно.

Я не уверен, о чем вы спрашиваете - то же самое, что и с любой другой асинхронной задачей: сделать запрос, обновить состояние, когда оно будет выполнено. В зависимости от ваших потребностей вы можете подождать, пока все выборки не будут завершены, в противном случае вы можете принудительно выполнить несколько повторных рендеров, прежде чем вы действительно будете готовы.

Dave Newton 06.11.2018 21:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
41
1

Ответы 1

Вы не можете обновить состояние внутри componentDidUpdate, потому что это немедленно вызовет бесконечный цикл. Вы обновляете состояние, компонент перерисовывает, вызывает componentDidUpdate, вы обновляете состояние и т. д.

Вместо этого вам нужно поместить всю эту информацию в ловушку componentDidMount. Здесь можно вызвать setState несколько раз.

Выполните первоначальную выборку и установите данные в свое состояние. Затем с помощью этого же метода выполните последующие выборки данных. По мере получения новых данных обновите переменную локального метода для data и снова вызовите setState с новой версией data.

componentdidmount будет запущен только один раз. не могли бы вы дать какой-нибудь код по этому поводу.

Santhosh 09.11.2018 10:40

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

Santhosh 09.11.2018 10:44

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