Иногда мне было трудно понять фундаментальные различия между методами componentWillMount () и componentDidMount ().Я продолжал разочаровываться, когда кто-то работал, но я не понимал, как и почему.
componentWillMount () Одна большая загвоздка, которую я не осознавал до сессии онлайн-исследовательской группы, состоит в том, что componentWillMount () устарелв 2018. Хотя вы можете продолжать использовать его (до React 17.0), это не лучшая практика, потому что это небезопасно для асинхронного рендеринга.Если вы решите продолжать использовать его, вы должны использовать UNSAFE_componentWillMount ().
Причина Использование вызова выборки в componentWillMount () заставляет компонент сначала визуализироваться с пустыми данными, потому что componentWillMount () НЕ будетвозврат до первого рендеринга компонента.
Из-за того, что события JavaScript являются асинхронными, при выполнении вызова API браузер продолжает выполнять другую работу, пока вызов все еще находится в движении.С React, в то время как компонент выполняет рендеринг, он не ожидает завершения componentWillMount (), поэтому компонент продолжает рендеринг.
С учетом всего сказанного вам потребуется создать компонент, который по-прежнему выглядитпрезентабельный без данных, которые вы надеетесь отобразить.Нет никакого способа (даже таймера), чтобы остановить рендеринг компонента, пока данные не присутствуют.
Когда я строил свой проект, я не знал об устаревании componentWillMount (), и я не сделалНе понимаю, почему я продолжал получать сообщение об ошибке «не могу прочитать свойство« карта »из неопределенного».Я был в замешательстве, потому что у меня был массив, и он должен был заполняться данными, но это не так.
Оказывается, это имеет смысл, так как компонент сначала отображается с пустыми данными, поэтомумассив был пуст и не мог быть повторен.Только в этот момент я узнал, что рекомендуется использовать componentDidMount ().
componentDidMount () Лучшее место для вызовов для извлечения данных - в componentDidMount ().componentDidMount () вызывается только один раз на клиенте по сравнению с componentWillMount (), который вызывается дважды, один раз на сервер и один раз на клиенте.Он вызывается после первоначального рендеринга, когда клиент получил данные с сервера, и до того, как данные отображаются в браузере.В связи с тем, что данные не будут загружены до тех пор, пока после первоначального рендеринга, разработчику НЕОБХОДИМО правильно настроить начальное состояние компонентов.
В примечании стороннего типа с помощью componentDidMount () вы можете использовать таймери обновляйте данные так часто, чтобы пользователю никогда не приходилось обновлять страницу.Я бы сказал, что это действительно полезная функция, которая может быть полезна в проектах / веб-сайтах.