Я понимаю, почему componentDidMountэто подходит для всего, что требует доступа к DOM, но запрос AJAX не обязательно или обычно требует этого.
Что дает?
Я понимаю, почему componentDidMountэто подходит для всего, что требует доступа к DOM, но запрос AJAX не обязательно или обычно требует этого.
Что дает?
Ответы:
componentDidMountдля побочных эффектов. Добавление слушателей событий, AJAX, изменение DOM и т. Д.
componentWillMountредко бывает полезным; особенно если вы заботитесь о рендеринге на стороне сервера (добавление прослушивателей событий вызывает ошибки и утечки, а также множество других вещей, которые могут пойти не так).
Говорят об удалении componentWillMountиз компонентов класса, поскольку он служит той же цели, что и конструктор. Он останется на createClassкомпонентах.
componentWillMount? Я действительно не вижу разницы.
componentWillMountбудет выполняться на стороне сервера . Если бы вы использовали, componentDidMountто это будет выполняться только на стороне клиента. В результате размещение вещей, componentWillMountкоторые выполняют внешние взаимодействия или привязаны к событиям и т. Д., Не является хорошей идеей. Если вы не планируете рендерить компоненты на стороне сервера, это все равно не лучшая идея только для потенциальной переносимости кода. Это все выходит за рамки основной причины, по которой это плохо, что объясняется в ответе @daniula.
У меня тоже была такая же проблема в начале. Я решил попробовать сделать запросы, componentWillMountно это закончилось различными небольшими проблемами.
Я запускал рендеринг, когда вызов ajax завершался с новыми данными. В какой-то момент рендеринг компонента занимал больше времени, чем получение ответа от сервера, и в этот момент обратный вызов ajax запускал рендеринг на отключенном компоненте. Это своего рода крайний случай, но его, вероятно, больше, поэтому безопаснее придерживаться componentDidMount.
componentWillMount, поэтому вы все равно должны продолжать использовать componentDidMountдля своих вызовов ajax.
setStateконструктор компонентов, и у вас нет возможности определить, когда будет завершен вызов AJAX. twitter.com/dan_abramov/status/576453138598723585
В соответствии с настройкой документации, состояние componentWillMountне запускает повторный рендеринг. Если вызов AJAX не блокируется и вы возвращаете сообщение Promise, обновляющее состояние компонента в случае успеха, есть вероятность, что ответ придет после того, как компонент был отрисован. Поскольку componentWillMountне запускает повторную визуализацию, у вас не будет ожидаемого поведения, которое представляет собой визуализацию компонента с запрошенными данными.
Если вы используете какую-либо из библиотек потоков и запрошенные данные попадают в хранилище, к которому подключен компонент (или наследуются от подключенного компонента), это не будет проблемой, поскольку получение этих данных, скорее всего, изменит свойства. в конце концов.
componentWillMountне запускает повторную визуализацию только потому, что новое состояние определено перед первой визуализацией. Но если setStateвызывается в обратном вызове AJAX, он определенно будет вызван после первого рендеринга и вызовет повторный рендеринг.
componentWillMountнем, он потерпел бы неудачу, учитывая, что компонент ... не смонтировался.