V4Fire / Client

V4Fire client core library
MIT License
22 stars 14 forks source link

Пометить некоторые директивы как unsafe #1314

Open shining-mind opened 1 week ago

shining-mind commented 1 week ago

Надо добавить v-unsafe-* для:


Директива v-hook позволяет на любой VNode добавить набор обработчиков. Задумывалась и юзается эта директива для симуляция жизненного цикла компонента для функциональных компонентов. В идеале, эта директива не должна юзаться вообще в продуктовом коде.

Если же вы её юзаете, то вы должны понимать, что вы добавляете хук на VNode, а не на компонент.

К чему я это: вот у вас компонент mounted, а потом он обновляется и удаляет кусок шаблона в котором была директива - у директивы случится unmounted. Но компонент при этом updated.

А теперь наоборот, у вас функ. компонент, который by-design не обновляется. Он может быть только пересоздан родителем при его перерендере.

А теперь внимание, пересоздание функ. компонента поставит его в состояние mounted, а вот у директивы на узле может произойти updated

Почему? Да просто потому, что Vue переиспользует VNode между рендерами если это возможно, а функциональный компонент (вернее его контекст) пересоздается всегда при любом перерендере.