Почему рекомендации React рекомендуют делать AJAX в componentDidMount, а не componentWillMount? - программирование
Подтвердить что ты не робот

Почему рекомендации React рекомендуют делать AJAX в componentDidMount, а не componentWillMount?

Название говорит все. Я понимаю, почему componentDidMount подходит для всего, что требует доступа DOM, но запрос AJAX не обязательно или обычно нуждается в этом.

Что дает?

4b9b3361

Ответ 1

componentDidMount для побочных эффектов. Добавление прослушивателей событий, AJAX, мутация DOM и т.д.

componentWillMount редко бывает полезным; особенно если вы заботитесь о рендеринге на стороне сервера (добавление прослушивателей событий вызывает ошибки и утечки, а также множество других вещей, которые могут пойти не так).

Говорят об удалении componentWillMount из компонентов класса, поскольку он выполняет ту же задачу, что и конструктор. Он останется на компонентах createClass.

Ответ 2

У меня была такая же проблема и в начале. Я решил попробовать сделать запросы в componentWillMount, но в конечном итоге это связано с небольшими проблемами.

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

Ответ 3

В соответствии с настройкой документации состояние в componentWillMount не приведет к повторному рендерингу. Если вызов AJAX не блокируется, и вы возвращаете Promise, которые обновляют состояние компонента при успешном выполнении, есть вероятность, что ответ будет получен после того, как компонент будет визуализирован. Поскольку componentWillMount не запускает повторную визуализацию, у вас не будет ожидаемого поведения, которое будет отображаться компонентом с запрошенными данными.

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