вы можете отложить начало перехода, дождавшись завершения анимации выхода.
const sleep = t => new Promise(res => setTimeout(res, t));
...
const transition = useTransition(initial, {
from: { position: "absolute", opacity: 0 },
enter: i => async next => {
await sleep(1000);
await next({ opacity: 1 });
},
leave: { opacity: 0 }
});
Это задерживает анимацию также при самом первом запуске. У вас может быть ссылка для отслеживания того, был ли компонент отрисован ранее или это его первый рендеринг, тогда вы можете пропустить вызов sleep
, если это первый рендер.
OR
Вы можете просто указать trail
config
const transition = useTransition(initial, {
from: { position: "absolute", opacity: 0 },
enter: { opacity: 1 },
leave: { opacity: 0 },
trail: 300
});