无法在即时搜索结果上使用 Framer Motion 吗?动画更新 .map() 函数
Is it impossible to use Framer Motion on instant Search Results? Animating an updating .map() function
https://i.imgur.com/drQmJn5.mp4
最初的结果是完美的动画。交错淡入。
但是,之后的所有结果都突然出现并且没有动画。我不明白为什么更新后的结果不是动画的。
代码目前如下所示:
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: {
staggerChildren: 0.3
}
}
};
const listItem = {
hidden: { opacity: 0},
show: { opacity: 1}
};
<PostList
variants={container}
initial="hidden"
animate="show"
as={motion.ul}>
{results && results.slice(0, 2).map((result, i) => (
<PostListItem
as={motion.li}
variants={listItem}
key={i}
> blah blah
</PostListItem>
))}
您不应将循环索引用作 PostListItem
中的 key
。由于索引(以及因此键)将始终相同,因此它不会让 Framer 跟踪何时添加或删除元素以对其进行动画处理。
而是为每个元素使用唯一的值 id
属性。这样 React(和 Framer)就会知道它何时渲染不同的元素(相对于具有不同数据的相同元素)。这就是触发动画的原因。
这里有更详尽的解释:
react key props and why you shouldn’t be using index
https://i.imgur.com/drQmJn5.mp4
最初的结果是完美的动画。交错淡入。
但是,之后的所有结果都突然出现并且没有动画。我不明白为什么更新后的结果不是动画的。
代码目前如下所示:
const container = {
hidden: { opacity: 0 },
show: {
opacity: 1,
transition: {
staggerChildren: 0.3
}
}
};
const listItem = {
hidden: { opacity: 0},
show: { opacity: 1}
};
<PostList
variants={container}
initial="hidden"
animate="show"
as={motion.ul}>
{results && results.slice(0, 2).map((result, i) => (
<PostListItem
as={motion.li}
variants={listItem}
key={i}
> blah blah
</PostListItem>
))}
您不应将循环索引用作 PostListItem
中的 key
。由于索引(以及因此键)将始终相同,因此它不会让 Framer 跟踪何时添加或删除元素以对其进行动画处理。
而是为每个元素使用唯一的值 id
属性。这样 React(和 Framer)就会知道它何时渲染不同的元素(相对于具有不同数据的相同元素)。这就是触发动画的原因。
这里有更详尽的解释:
react key props and why you shouldn’t be using index