问题在于,在过渡期间,您只能在离开和进入元素中看到当前对象。这是因为您使用状态而不是过渡的项目属性。让 useTransition 处理状态变化,它知道哪个元素离开,哪个进入:
{transitions.map(({ item, props, key }) => {
return (
<animated.div key={key} style={{ ...props, background: pages[item].background }}>
{pages[item].text}
</animated.div>
)
})}
方向变化几乎与评论中一样。确保三元运算中的条件与方向值匹配。例如,如果您将方向设置为 1 和 0(而不是 1 和 -1),那么您的原始条件应该可以工作。
from: { opacity: 0, transform: `translate3d(${currentState.direction ? '200%': '-200%'},0,0)` },
enter: { opacity: 1, transform: 'translate3d(0%,0,0)' },
leave: { opacity: 0, transform: `translate3d(${currentState.direction ? '-200%': '200%'},0,0)` },
https://codesandbox.io/s/distracted-lamport-6pkup?file=/src/index.js