Почему рекомендации React рекомендуют делать AJAX в componentDidMount, а не componentWillMount?
Название говорит все. Я понимаю, почему componentDidMount подходит для всего, что требует доступа DOM, но запрос AJAX не обязательно или обычно нуждается в этом.
Что дает?
Ответ 1
componentDidMount для побочных эффектов. Добавление прослушивателей событий, AJAX, мутация DOM и т.д.
componentWillMount редко бывает полезным; особенно если вы заботитесь о рендеринге на стороне сервера (добавление прослушивателей событий вызывает ошибки и утечки, а также множество других вещей, которые могут пойти не так).
Говорят об удалении componentWillMount из компонентов класса, поскольку он выполняет ту же задачу, что и конструктор. Он останется на компонентах createClass.
Ответ 2
У меня была такая же проблема и в начале. Я решил попробовать сделать запросы в componentWillMount, но в конечном итоге это связано с небольшими проблемами.
Я запускал рендеринг, когда вызов ajax заканчивается новыми данными. В какой-то момент рендеринг компонента занял больше времени, чем получение ответа от сервера, и на этом этапе обратный вызов ajax вызывал рендеринг на немонтированном компоненте. Это своего рода краевой кейс, но, вероятно, больше, поэтому безопаснее придерживаться componentDidMount.
Ответ 3
В соответствии с настройкой документации состояние в componentWillMount не приведет к повторному рендерингу.
Если вызов AJAX не блокируется, и вы возвращаете Promise, которые обновляют состояние компонента при успешном выполнении, есть вероятность, что ответ будет получен после того, как компонент будет визуализирован.
Поскольку componentWillMount не запускает повторную визуализацию, у вас не будет ожидаемого поведения, которое будет отображаться компонентом с запрошенными данными.
Если вы используете какую-либо библиотеку потоков и запрошенные данные в хранилище, к которому компонент подключен (или наследуется от подключенного компонента), это не будет проблемой, поскольку прием этих данных будет, скорее всего, смените реквизит в конце концов.