перед mount-ом нового компонента? Если в виде схемы, то нужно так:
P.S. K1 - компонент 1, К2 - компонент 2
[K1] mount —> [K1] uses & changes state —> [K1] unmount —> [K1] clears state —> [K2] mount —> [K2] uses & changes clean state
А выходит:
[K1] mount —> [K1] uses & changes state —> [K1] unmount —> [K2] mount —> [K2] uses & changes garbage-filled state —> [K1] clears state —> [K2] uses & changes clean state
Проблема такой ситуации именно в том, что K2 при инициализации получает загрязненный state, а это вызывает различного рода undefined behavior & errors. Лепить проверки в K2 на наличие грязи в state и прочие танцы с бубном я отношу в разряд костылей. Я хочу придерживаться логики:
Компонент живет и использует состояние —> компонент подчищает за собой состояние —> новый компонент живет и использует чистое состояние
P.S. state глобальный, для обоих компонентов он общий
Вопрос все ещё актуален. Есть какие-нибудь соображения? Переформулирую вопрос: Почему новый компонент рендерится раньше, чем происходит useEffect unmount предыдущего?
Key
? :/
как у тебя маунтится/анмаунтится К1 и К2?
В анмаунте точно не асинхронное действие? Есть минимум репродсюбл пример?
При помощи useEffect. Но говоря про mount K2 я хотел бы кое что уточнить: Говоря "mount" компонента K2, я имею ввиду именно вход в функцию, а не useEffect, то есть: function K2(props) { // i mean mount here useEffect(() => { // not here }, []); return <... />; }
я имею в виду как у тебя компоненты живут? ты по условию переключаешь из 1 в 2? или что?
Роутинг
ага, то есть у тебя при переходе из одного роута в другой не чистятся данные старого роута?
Ммм, да, можно так сказать
Обсуждают сегодня