【问题标题】:React - Framer motion: prevent initial prop from triggeringReact - Framer 动作:防止触发初始道具
【发布时间】: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.divinitial 属性将再次被触发,从而导致视觉冲突。

<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


【解决方案1】:

您正在寻找&lt;AnimatePresence initial={false}&gt;

来自文档:

Suppressing initial animations

通过在 AnimatePresence 上设置 initial={false},组件出现时 AnimatePresence 首次加载将以其动画状态开始。仅有的 在此初始渲染之后进入的组件将进行动画处理。

【讨论】:

  • 您好,感谢您的回答!我尝试应用initial={false},但结果保持不变:更改页面时,例如第 1 页淡出,同时第 2 页淡入(通过更改不透明度)。我只想在添加记录时淡入或在删除时淡出记录,而不是在更改分页页面时。
猜你喜欢
  • 2013-12-10
  • 2022-11-01
  • 2015-01-07
  • 1970-01-01
  • 2022-08-19
  • 2022-11-16
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多