Обновление реагирующего контекста от потребителя componentDidMount вызывает бесконечное повторное рендеринг

Series_Name = pd.DataFrame (имя_серии)

1
задан M.D. 16 January 2019 в 14:26
поделиться

3 ответа

Цикл запроса происходит потому, что компонент DataList перерисовывается, вызывая ComponentDidMount, который вызывает getData() после каждого рендеринга.

Компонент рендерится, если есть изменение в реквизитах или состоянии компонента.

getData() устанавливает свойство состояния requestStatus (именно поэтому все ваше приложение перерисовывается), которое является опорой DataList - вызывая перерисовку DataList.

Вы не должны использовать requestStatus в качестве опоры DataList, поскольку вы все равно получаете это из контекста.

0
ответ дан mallocthePD 16 January 2019 в 14:26
поделиться

Это может быть связано с тем, что функция уровня вашего провайдера (dataContextProvider) getData имеет то же пространство имен, что и ваша функция, которую вы импортируете из ../Api.

И затем я считаю, что когда следующая строка const data = await getData(); выполняется в блоке кода ниже, она на самом деле вызывает функцию провайдеров getData, вызывая тем самым цикл.

  async getData() {
      this.setState({ requestStatus: RequestStatus.RUNNING });
      try {
        const data = await getData();
        this.setState({ data, requestStatus: RequestStatus.INACTIVE });
      } catch (error) {
        this.setState({ requestStatus: RequestStatus.FAILED });
      }
    }
0
ответ дан S Hamza 16 January 2019 в 14:26
поделиться

Хорошо, после попытки воспроизвести проблему в песочнице, я понял, в чем проблема: я обернул родительский компонент в HOC внутри функции рендеринга, например так:

<Route exact path="/datapage" component={requireLoggedInUser(Page)} />

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

0
ответ дан M.D. 16 January 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: