У заголовку все сказано. Я розумію, чому 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
це не вдасться, враховуючи, що компонент ... не змонтувався.