javascript - 使用 setInterval 和 setimeout 使 3 个组件依次加载
问题描述
我正在制作一个简单的反应应用程序,它只在达到 100% 时加载一个组件,然后加载第二个组件,在 100% 之后加载第三个组件。
这就是它的工作原理,我有一个开始按钮,当你点击它时,它会启动第一个加载第一个组件的函数:
<Button
variant="outlined"
type="submit"
onClick={() => {
setLoading(true);
start();
}}
>
Start
</Button>
这是加载组件,它们都是相同的,但状态不同:
const load1 = () => {
const timer = setInterval(() => {
setProgress1((prevProgress) =>
prevProgress >= 100 ? 100 : prevProgress + 10
);
}, 800);
return () => {
clearInterval(timer);
};
};
const load2 = () => {
const timer = setInterval(() => {
setProgress2((prevProgress) =>
prevProgress >= 100 ? 100 : prevProgress + 10
);
}, 800);
return () => {
clearInterval(timer);
};
};
const load3 = () => {
const timer = setInterval(() => {
setProgress3((prevProgress) =>
prevProgress >= 100 ? 100 : prevProgress + 10
);
}, 800);
return () => {
clearInterval(timer);
};
};
我的开始看起来像这样:
const analyseDNA = () => {
setTimeout(load1, 2000);
setTimeout(setLoading2(true), 2000);
setTimeout(load2, 4000);
setTimeout(setLoading3(true), 4000);
setTimeout(load3, 6000);
};
应该发生的是依次加载组件 1、组件 2 和组件 3。然后你可以再次按开始,它也是一样的。
但是,使用此代码,组件 1 和组件 2 一起加载,然后在 6 秒后组件 3,当您再次按开始时,它仅加载组件 1,并且组件 3 已经加载,组件 2 没有任何反应。当我打开控制台我可以看到它正在打印 1、2、3,并且似乎间隔永远不会结束并且它一直在继续,我该如何解决这个问题?
解决方案
推荐阅读
- javascript - 数据表不想从 API 中提取数据
- arduino-uno - 使用数组时arduino冻结
- c# - 如何设置redirect_uri登录google .Net Core 2,Docker
- f# - 对象同步异常仅在使用断点时,在 F#
- javascript - 使用 Regex 和 Jquery 替换页面内多
- go - 从偏移量获取时区名称
- angular - 在 Angular 8 构建中创建大量构建文件的 import() 语句的问题
- macaulay2 - 如何以表格格式枚举所有Grassmannian及其索引以及k和n?
- html - HTML 文件不理解 Django 内容
- python - LeetCode Python3 函数注释在 Visual Studio Code 中不起作用