Сегодня и Сергей Сова на бизнес-логику в хуках ругался и в патреоновом чатике JavaScript.Ninja вспомнили прекрасное — useEffect в React 18 срабатывает дважды, если вы в Strict Mode. Вот такая мотивация:
Так как в будущем мы собираемся в целях улучшения производительности маунтить/анмаунтить компоненты туда-сюда (с сохранением стейта, конечно), то уже сейчас внедряем в Strict Mode поведение, когда каждый компонент маунтится, тут же анмаутится и снова маунтится. Чтобы вы успели подготовиться к прекрасному будущему.
* React mounts the component.
* Layout effects are created.
* Effects are created.
* React simulates unmounting the component.
* Layout effects are destroyed.
* Effects are destroyed.
* React simulates mounting the component with the previous state.
* Layout effects are created.
* Effects are created.
[линк]
Вот-вот, помните,
В общем-то есть очевидное ишью [Bug: v18 - How to deal with useEffect being called twice in Strict Mode?] где Дэн предлагает не забывать делать cleanup и отменять свои фетчи. Или вообще вообще использовать что-то для дедупликации и кеша запросов.
На худой конец, говорит, отключайте Strict Mode, если вам мешает, мол React 18 важнее, чем сидеть на старой версии.
Ну что значит «отключайте». Отключайте, правьте код, и снова включайте, чтобы быть готовыми к светлому будущему.
Так как в будущем мы собираемся в целях улучшения производительности маунтить/анмаунтить компоненты туда-сюда (с сохранением стейта, конечно), то уже сейчас внедряем в Strict Mode поведение, когда каждый компонент маунтится, тут же анмаутится и снова маунтится. Чтобы вы успели подготовиться к прекрасному будущему.
* React mounts the component.
* Layout effects are created.
* Effects are created.
* React simulates unmounting the component.
* Layout effects are destroyed.
* Effects are destroyed.
* React simulates mounting the component with the previous state.
* Layout effects are created.
* Effects are created.
[линк]
Вот-вот, помните,
вы не управляете хуками
. Хуками управляет движок реакта.В общем-то есть очевидное ишью [Bug: v18 - How to deal with useEffect being called twice in Strict Mode?] где Дэн предлагает не забывать делать cleanup и отменять свои фетчи. Или вообще вообще использовать что-то для дедупликации и кеша запросов.
На худой конец, говорит, отключайте Strict Mode, если вам мешает, мол React 18 важнее, чем сидеть на старой версии.
Ну что значит «отключайте». Отключайте, правьте код, и снова включайте, чтобы быть готовыми к светлому будущему.