【发布时间】:2021-08-30 19:17:25
【问题描述】:
我有一个基本的 CRUD 应用程序,我可以在其中添加和删除列表中的项目,该列表是动画的。这适用于 framer-motion,但我遇到以下问题:
每当我从列表中删除一个项目时,都会调用以下函数:
const handleDeleteFormation = async (id) => {
await axios({
method: "DELETE",
url: `http://localhost:1337/formations/${id}`
})
getFormations()
}
如你所见,我在删除后调用getFormations()函数重新渲染更新后的列表:
async function getFormations() {
const res = await axios.get('http://localhost:1337/formations')
setFormations(res.data)
console.log(res.data)
}
这将导致列表重新呈现,这很好。但是......在重新渲染之后,motion.div 的 initial 属性将再次被触发,从而导致视觉冲突。
<AnimatePresence exitBeforeEnter initial={false}>
{formations && formations.map((formation, index) =>
<motion.div
key={formation.id}
initial={{ opacity: 0, x: -10 }}
animate={{ opacity: 1, x: 0 }}
exit={{ opacity: 0, x: -10 }}
transition={{ type: "tween", ease: 'easeOut', duration: 0.2 }}
>
...
我的问题:是否可以防止initial 属性在列表更新后立即触发?
【问题讨论】:
-
此编辑似乎与您最初要求的完全不同(防止页面加载时出现动画)。除非键正在更改,否则列表更新时不应触发动画。这是一个精简的示例:codesandbox.io/s/modest-tharp-9vqti?file=/src/App.js 它是否可能实际上是一个子元素(没有键)在列表刷新时动画?
标签: reactjs framer-motion