javascript - 根据状态更改超时长度
问题描述
但是,尝试根据状态更改超时的长度时,它会消耗初始状态而不是更改后的状态。下面的代码:
const [animate, setAnimate] = useState({ start: false, finished: false, position: false });
const [rollType, setRollType] = useState(0);
const returnType = (type) => {
console.log(type)
if (type === 0) return 9000;
else if (type === 1) return 19000;
else if (type === 2) return 9000;
else if (type === 3) return 14000;
else if (type === 4) return 18000;
else if (type === 5) return 9000;
else return false;
}
const animateRoll = useCallback(() => {
setRollType(Math.floor(Math.random() * 5));
setTimeout(() => {
setAnimate({ ...animate, start: true, position: true })
setTimeout(() => {
setAnimate({ start: true, finished: true, position: true })
setTimeout(() => {
setAnimate({ ...animate, start: false, position: false })
}, 3000)
}, returnType(rollType))
}, 2000)
}, [animate, rollType, returnType])
问题是 returnType 函数返回 0 而不是更改的状态,并且在不同的动画类型上不会创建更长的超时时间。
解决方案
推荐阅读
- c# - 使用 C# 将自定义对象传递给 REST 端点
- python - 读取 CSV 文件时跳过行并选择错误的单元格
- ios - Siri 完整句子顺序,例如通过 WhatsApp 发送消息
- python-3.x - 在 Airflow 连接器中存储 RSA 密钥
- python-3.x - Python 3.+ 中的 CVXPY 1.0.24 无法正确解决四边形问题
- kubernetes - 无法使用 Azure Devops Pipeline Kubernetes@1 任务运行多个 kubectl 命令
- ios - 禁用 UIStackView 中特定堆栈的滚动
- docker - 如何在 docker 映像中应用 nix-shell 配置?
- python - 如何将具有相同列名的列数据的多个工作表复制并粘贴到另一个excel文件
- swift - 从 Contacts Framework 获取联系人在 iOS 13 中不起作用