Очередность отмены эффектов (useEffect) в реакт-компонентах

когда компонент размонтируется, то почему-то сначала вызывается отмена эффекта у родительского компонента, а потом у дочерних... (речь идет об useEffect-хуках)

Как-то не логично...

В чем может быть дело?

Проблема в том, что у меня в дочерних компонентах находятся маршруты карты.. И когда происходит размонтирование маршрутов, то они пытаются себя удалить в карте... а карта уже удалена, т.к. отмена эффекта у родительского компонента вызывается раньше, чем у дочерних (дочерние компоненты узнают о родительском через контекст)

https://codesandbox.io/s/ocherednost-otmeny-effektov-g0z0r

Смотрите консоль браузера

Я ожидаю: Child cancel useEffect Parent cancel useEffect


Ответы (1 шт):

Автор решения: Khusamov Sukhrob

https://github.com/facebook/react/issues/16728

Мы гарантируем, что родительские эффекты уничтожаются раньше, чем дочерние . Причина этого заключается в том, что родители часто имеют тенденцию зависеть от какого-то ресурса, созданного ребенком. Например, удаление слушателя из DOM-узла, которым обязательно управляет ребенок. Если ребенок сначала удаляет свои ресурсы, родитель, возможно, не сможет должным образом очистить себя. Это не специфично для хуков - это как componentWillUnmountработает.

Мы не даем гарантий относительно порядка братьев и сестер, будь то внутри компонента или между братьями и сестрами. Это потому, что сильные гарантии мешают рефакторингу. Внутри компонента вы должны иметь возможность переупорядочивать крючки, особенно пользовательские. Ожидается, что между братьями и сестрами вы также можете безопасно переупорядочить их. Также распространено, что только один брат обновляется или отключается, поэтому зависимости между братьями в любом случае не могут быть надежными.

→ Ссылка