javascript - 组件卸载和重新安装时跟踪进度条类型状态的最佳方法?
问题描述
我正在重建/重构我用 vanilla JS 构建的旧网页游戏到 React + Redux。我创建了一种特定类型的按钮,如下所示:
有些按钮有几分钟的冷却时间。
我已经成功地用钩子重建了按钮组件,但意识到了一个大问题。游戏中有“标签”,点击后会带您进入不同的屏幕。这意味着这些按钮将卸载并失去其状态。
当我在处理 vanilla JS 版本时,我处理这个问题的方式是将所有按钮保存在一个数组中,并通过主逻辑循环,我将遍历所有按钮并更新它们的进度。
//some pseudocode
const gameTick = 30
const buttons = [
{
name: 'chop tree',
duration: 2000 // milliseconds,
currentDuration: 1230,
...
}, {...}
]
// gameLoop gets fired every 30milliseconds
const gameLoop = () => {
buttons.forEach(btn => {
if (btn.currentDuration < btn.duration) {
btn.currentDuration += gameTick
}
})
}
setInterval(gameLoop, gameTick)
然后我会计算百分比并将进度条的宽度设置为它。
虽然使用 React + Redux,我可以将按钮存储到状态中,但我将如何处理卸载?如果一个按钮在运行过程中被卸载,它仍然需要在后台更新,所以当用户返回选项卡时,按钮会更进一步,甚至可能完成。
我看不到如何在减速器中获得这些信息,同时不断更新状态并传递给按钮组件。
我必须处理的另一个可能的想法是在我更改选项卡时存储时间戳,然后当我使用按钮切换回选项卡时,我会计算时间差并将其相加。这种方法的问题是您必须切换到正确的选项卡才能完成某些事情。
有任何想法吗?
解决方案
推荐阅读
- javascript - 复选框不会从 keydown 事件更改选中的值,但仍然能够聚焦并切换到下一个元素
- c# - 在 C# 中使用空数据类型初始化列表
- typescript - Make package available in Vue with Typescript
- r - 在 Rmarkdown 中的 bash 中设置环境变量
- c - 如何通过引用函数将全局结构指针作为调用传递?
- sql - COUNT 返回所有行的数量,即使是用 except 排除的行
- reactjs - 在这种情况下,上下文似乎是管理用户身份验证状态的最佳方式吗?
- spring - 设置 CompletionPolicy 以提交整个文件
- c# - 如何设置将尝试使用的 SQL Server Visual Studio 版本?
- json - API Gateway 在 XML 标记中包装响应