Узнайте о сложном поведении хука useEffect при использовании строгого режима в React 18.
React 18 вышел уже пару недель. Хотя он приносит несколько улучшений, он вводит довольно странное поведение в один из наиболее часто используемых хуков. Хотите знать, что это? Вот так…
useEffect(), который должен запускаться только при начальном монтировании, запускается дважды!
Да, вы не ослышались! Если вы используете React 18 в строгом режиме, следующий фрагмент кода:
Будет производить такой вывод:
Hello there!
Hello there!
Как указано в документации , React 18 вводит новую проверку только для разработки в строгом режиме. Эта новая проверка автоматически размонтирует и повторно монтирует каждый компонент всякий раз, когда компонент монтируется в первый раз, восстанавливая предыдущее состояние при втором монтировании.
Такое решение было принято командой React, так как в будущем они хотели бы добавить функцию, позволяющую React добавлять и удалять разделы пользовательского интерфейса с сохранением состояния. Поскольку для этого требуется, чтобы компоненты были устойчивы к эффектам многократной установки и уничтожения, была введена дополнительная проверка.
Итак, каждый компонент монтируется, затем размонтируется и, наконец, снова монтируется?
Да, так это работает сейчас. Если бы мы использовали useEffect()хук следующим образом:
После обновления страницы вывод будет
Mounting...
Unmounting...
Mounting...
Резюме
React 18 представляет новую проверку только для разработки в строгом режиме. Эта проверка автоматически размонтирует и повторно монтирует компонент, в результате чего хук useEffect срабатывает дважды при первоначальном монтировании.
Сколько раз вы, не задумываясь, выбрасывали пластиковую бутылку, стеклянную банку, алюминиевую банку или пакет экологически чистой энергии? Сколько раз вы хотели получить что-то взамен за их переработку? Если вы похожи на большинство людей, ответ, вероятно, много раз. Переработка часто рассматривается как хлопотное дело, рутинная работа или обязанность, не приносящая немедленных или ощутимых выгод.
Было уже за полночь, когда Хейден отвез Кэти обратно в общежитие колледжа после их совместного вечера. У нее был ранний урок утром, и у нее не было другой смены одежды после того, как она осталась с ним прошлой ночью.
«Он защитит меня, когда я в опасности. Он спрячет меня в своей палатке.
То, что было старым, теперь снова новое, а то, что раньше было блестящим, теперь кажется скучным. Я не говорю о джинсах JNCO, которые вернулись среди крутых парней в центре города вместе с другими моделями конца 1990-х годов.
В современном взаимосвязанном мире угроза кибератак более распространена, чем когда-либо. Киберпреступники и государственные деятели постоянно стремятся использовать уязвимости и украсть ценные данные, подвергая организации любого размера значительному риску.