Очередность отмены эффектов (useEffect) в реакт-компонентах
когда компонент размонтируется, то почему-то сначала вызывается отмена эффекта у родительского компонента, а потом у дочерних... (речь идет об useEffect-хуках)
Как-то не логично...
В чем может быть дело?
Проблема в том, что у меня в дочерних компонентах находятся маршруты карты.. И когда происходит размонтирование маршрутов, то они пытаются себя удалить в карте... а карта уже удалена, т.к. отмена эффекта у родительского компонента вызывается раньше, чем у дочерних (дочерние компоненты узнают о родительском через контекст)
https://codesandbox.io/s/ocherednost-otmeny-effektov-g0z0r
Смотрите консоль браузера
Я ожидаю: Child cancel useEffect Parent cancel useEffect
Ответы (1 шт):
https://github.com/facebook/react/issues/16728
Мы гарантируем, что родительские эффекты уничтожаются раньше, чем дочерние . Причина этого заключается в том, что родители часто имеют тенденцию зависеть от какого-то ресурса, созданного ребенком. Например, удаление слушателя из DOM-узла, которым обязательно управляет ребенок. Если ребенок сначала удаляет свои ресурсы, родитель, возможно, не сможет должным образом очистить себя. Это не специфично для хуков - это как componentWillUnmountработает.
Мы не даем гарантий относительно порядка братьев и сестер, будь то внутри компонента или между братьями и сестрами. Это потому, что сильные гарантии мешают рефакторингу. Внутри компонента вы должны иметь возможность переупорядочивать крючки, особенно пользовательские. Ожидается, что между братьями и сестрами вы также можете безопасно переупорядочить их. Также распространено, что только один брат обновляется или отключается, поэтому зависимости между братьями в любом случае не могут быть надежными.