【发布时间】:2021-07-02 00:40:52
【问题描述】:
我正在尝试使用 React/Typescript 创建一个呼吸应用程序。我不想使用 React Native。
我将呼吸圈设置为组件,并且我为每个圈设置了自己的动画(如果有的话)。 (我不提供此代码,因为这不是问题)
我遇到的问题是让动画无限运行,同时保持 setTimeout() 的延迟。 (见下面的代码)
import React, { useState, useEffect } from "react";
import "./App.css";
import {
BreatheInCircle,
BreatheHoldInCircle,
BreatheOutCircle,
BreatheHoldOutCircle,
} from "./BreatheCircle";
const circles = [
<BreatheInCircle/>,
<BreatheHoldInCircle />,
<BreatheOutCircle />,
<BreatheHoldOutCircle />,
];
const App = () => {
const [circleArray] = useState(circles);
const [displayElement, setDisplayElement] = useState(<div></div>);
const [index, setIndex] = useState(0);
useEffect(() => {
setTimeout(() => {
setDisplayElement(circleArray[index]);
setIndex(index + 1);
}, 4000);
});
return (
<div>
{displayElement}
</div>
);
}
export default App;`enter code here`
当我现在运行它时,它将为每个组件运行一次 useEffect,然后停止。我需要动画重复,直到我停止它。
编辑
我能够解决我遇到的延迟问题,但我仍然需要循环方面的帮助。以下是更新后的代码,延迟时间有所变化。
const App = () => {
const [circleArray] = useState(circles);
const [displayElement, setDisplayElement] = useState(<div></div>);
const [index, setIndex] = useState(0);
const timeoutDelays = [0, 4000, 4000, 4000, 4000];
const changeCircle = () => {
setCircle(circles[index]);
setIndex(index + 1);
};
useEffect(() => {
setTimeout(changeCircle, timeoutDelays[index]);
}, [index]);
如果 setInterval 仍然是一个解决方案,我想知道如何实现它。现在,它运行一次,然后停止。
【问题讨论】:
标签: reactjs typescript animation