reactjs - 如何使用成帧器运动对每个状态变化进行动画处理
问题描述
我认为曾经渲染帧运动会重新制作我的动画,因为初始设置为隐藏并且动画设置为显示。但这种情况并非如此。
我怎样才能让它在每次状态变化时重新播放动画?
import React, { useEffect, useState } from "react";
import { motion} from "framer-motion";
import styled from "styled-components";
const Screen = () => {
const [state, setState] = useState(1);
useEffect(() => {
setInterval(() => {
setState(Math.random());
}, 4000);
}, []);
return (
<Title variants={variants} animate="show" initial="hide">
{console.log("re-render")}
{`screen ${state}`}
</Title>
);
};
const Title = styled(motion.div)`
color: red;
`;
export const variants = {
show: {
opacity: 1,
y: 0,
transition: {
ease: "easeOut",
duration: 0.3
}
},
hide: {
y: -20,
opacity: 0
}
};
export default Screen;
解决方案
如果您只想重新安装元素,请key
在其上使用道具,如下所示:
return (
<motion.div key={state} variants={variants} animate={'show'} initial="hide">
{`screen ${state}`}
</motion.div>
);
Codesandbox(请提供 Codesandbox 以供日后复制)
它看起来很奇怪,但如果这是你想要的效果,它就会起作用。
为了更流畅的动画,我会使用动画控件或AnimatePresence
可能。
推荐阅读
- java - 使用 java stream() 在服务器端 API 中计数是否更好,然后在 spring jpa 中重复使用计数查询调用
- joomla - 如何通过订单 ID 在我的自定义组件视图中获取 j2store 订单详细信息?
- javascript - 当收集有大数据 ~ 6K 文档时,Firestore 创建查询需要很长时间
- elasticsearch - 无法在 ECK 中重命名节点集
- python - map_partitions 数据帧的 Dask 元数据
- html - 更新 ASP.NET Web API 项目中插入的记录
- kubernetes - 设计从外部源获取数据并发送到同一目的地的 k8s 应用程序
- python-3.x - 使用 chrome 扩展的 Eel 应用程序
- reactjs - 如何使用功能组件在ant-design中进行列级搜索?
- python - 我们可以集成 POLQA(感知客观听力质量评估)来检查通话语音质量吗?