Я проиллюстрировал проблему в этом CodePen
const Component = ({ structure }) => {
switch (structure) {
case 'nested':
return (
<div>
<AnimatedComponent />
</div>
);
case 'flat':
return
<AnimatedComponent />
;
}
};
В AnimatedComponent
есть некоторая логика, которая меняет стиль компонента в анимированном виде, например. изменить цвет фона с черного на красный в течение 1 секунды. Анимация запускается изменением класса цвета на AnimatedComponent
. Существует CSS для обработки анимации с учетом измененного класса.
При изменении структуры DOM с вложенной на плоскую элемент HTML уничтожается и создается заново, начальное состояние перехода теряется (т. е. браузер не знает, какой класс был установлен ранее, поскольку элемент был создан заново).
Я хочу, чтобы React изменил структуру DOM, перемещая элементы в новые позиции, а не уничтожая и воссоздавая их заново.
Это возможно?
Я пытался использовать реквизит key
для <AnimatedComponent />
, но он исправляет только вспышку изменения DOM. Анимация пропущена. См. Codepen. Спасибо Thomas Rooney за это предложение.
Могу ли я сказать React применить изменения класса всего через один тик после изменения позиции элемента DOM?