Почему я должен AJAX вещи не в constructor (), а в componentDidMount ()? - PullRequest
0 голосов
/ 10 июля 2019

Почему мне нужно использовать componentDidMount для async или ajax?Я понимаю, что для componentWillMount это связано с тем, что независимо от того, какие изменения происходят в componentWillMount, существует проблема, которую нельзя повторно выполнить.Но в случае конструктора, не будет ли повторный рендеринг, если произошли изменения?

И причина, по которой я думал об этом по-своему, заключается в том, что если вы выполняете асинхронный вызов в конструкторе, это, вероятно, потому, что это займет много времени при первом рендеринге, и это займет многовремя загрузки страниц.Есть ли другая причина?

1 Ответ

2 голосов
/ 10 июля 2019

давайте предположим, что вызов Api в компоненте будет монтировать / конструктор

Вызов Async запускается в CWM / Constructor, и другие строки этой функции начнут выполняться. Как только эти функции будут выполнены, функция рендеринга начнет выполняться и при условии выполнения 50% функции рендеринга. В то же время вы получили ответ на асинхронный вызов, который вы сделали в CWM / конструкторе, теперь вы вызовете setState, который запускает цикл обновления для обновления данных, но сам скелет html не готов (так как функция рендеринга не завершена) куда будут идти данные и обновления?

Это полностью пустая трата первого выполнения функции рендера. Вместо этого позвольте завершить функцию рендеринга, которая, в свою очередь, создаст html-объект, а затем сможет обновить данные.

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

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

...