Анимация выхода Framer-motion на несмонтированном компоненте

Я пытаюсь воспроизвести анимацию при демонтаже компонента с атрибутом выхода, но она не работает, несмотря на наличие!

Входная анимация работает нормально, но не выходная!

Я предполагаю, что я не умею демонтировать свое описание, которое отображается, если props data.show истинно, логическое, которое я меняю при щелчке по проекту, короче говоря, если кто-то может указать мне ...

codeandbox

заранее спасибо


person Jonathan de BOISVILLIERS    schedule 12.03.2021    source источник
comment
Используемая вами архитектура работать не будет. Каждый раз, когда вы запускаете onToggleClick, вы запускаете изменение в data prop, и компонент повторно отрисовывается с новым экземпляром AnimatePresense, поэтому exit   -  person Samuel Goldenbaum    schedule 13.03.2021


Ответы (1)


В вашем коде есть довольно много проблем, и вам предлагается сначала понять, что запускает re-rendering в React.

Создавая новый ключ uuid каждый раз, когда вы меняете данные опоры, вы нарушаете способность React знать, какие компоненты нужно отрендерить снова, поэтому он повторно отрисовывает их все - так что это всегда новый экземпляр на AnimatePresence и никак не для AnimatePresence чтобы знать, что произошла смена ключа или изменение крепления. Также используйте перехватчики useCallback при передаче функций дочерним компонентам, чтобы избежать повторного -рендеры.

Переместите состояние к родительскому, обновите ключ карты до согласованного значения между рендерами и не обновляйте все данные реквизита только для того, чтобы развернуть / свернуть.

См. Обновленную песочницу.

Я предлагаю вам не анимировать несколько элементов, встроенных в одно и то же пространство, как это, так как у вас всегда будет немного подскакивать оставшиеся прямоугольники, но это уже другая тема.

person Samuel Goldenbaum    schedule 13.03.2021
comment
Большое спасибо за это разъяснение по поводу UUID. Я не знал об эффекте повторного рендеринга в React! Это объясняет все мелочи, которые я не понимал в отношении выходной анимации! Большое спасибо за то, что нашли время так быстро ответить мне! - person Jonathan de BOISVILLIERS; 13.03.2021
comment
Нет проблем, у меня были те же проблемы в прошлом, и это стало ясно после понимания цикла рендеринга. Не забудьте принять ответ, если он решил вашу проблему и будет полезен другим. - person Samuel Goldenbaum; 13.03.2021