Я понимаю, почему 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
нем, он потерпел бы неудачу, учитывая, что компонент ... не смонтировался.