Удерживайте уходящие дочерние элементы, пока не закончится их движение, и анимируйте изменения позиции и размера, в том числе между компонентами.
Animated.Keep
Animated.Keep удерживает прямых потомков с key на время их позы depart. seed={false} заставляет потомков, присутствующих при первом рендере, начинать с их позы, wait откладывает появление новых до завершения уходов, а onDeparted срабатывает после последнего.
Подготовка примера…
Animated.Scene и move
Animated.Scene измеряет зафиксированную раскладку. Элемент с move анимирует изменения своей позиции и размера; строка вроде move="pill" связывает элементы с одинаковой идентичностью внутри Scene, даже когда один размонтируется, а другой монтируется.
Scene владеет смещением и масштабом раскладки этих элементов, поэтому свои трансформации задавайте вложенному элементу.
Подготовка примера…
Присутствие через хук
useAnimatedPresence(visible, { enter, exit }) возвращает { mounted, animatedValue }, когда вы предпочитаете управлять монтированием сами.
createLayoutScene даёт ту же координацию захвата и фиксации любому рендереру или ручному изменению DOM.
outside-react.js
const scene = createLayoutScene({ tempo: { spring: { stiffness: 320, damping: 30 } } });
const card = scene.attach(element, { key: 'card' });
scene.capture(); // before the DOM changes
list.prepend(element); // any renderer or manual DOM work
scene.commit(); // animates from the captured rectangles