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