【发布时间】:2021-06-27 16:28:27
【问题描述】:
我正在实现一个简单的计时器,并在每次计数减 1 时使用 use effect 运行一个函数。
我有一个按钮,按下时会将计数状态更改为 10(因此,如果当前计数为 6,则按下此按钮应返回 10 并再次开始减少)。
计时器工作正常,但是当我按下按钮时,它会创建另一种状态,但不会更新原始状态。
例子:
从 10 点开始计数
10
9
8
7
我按下按钮回到 10
6 10
5 9
4 8
这就是正在发生的事情。我不知道为什么 useEffect 会卡在旧状态。
这是我的代码:
import React, { useState, useEffect } from "react";
import { useHistory } from "react-router-dom";
import Button from "react-bootstrap/Button";
export default function PagTimer() {
let history = useHistory();
const [contador, setContador] = useState(10);
const AddTime = () => {
setContador(10);
};
const Descontar = () => {
const timer = setTimeout(() => {
setContador(contador - 1);
}, 1000);
};
useEffect(() => {
if (contador === 0) {
history.push("/");
} else {
Descontar();
}
}, [contador]);
return (
<div>
<h1>{contador}</h1>
<Button onClick={AddTime} variant="outline-primary">
Add Time
</Button>
</div>
);
}
这是沙箱,所以更容易看到示例:https://codesandbox.io/s/awesome-wiles-oqh71?file=/src/App.js
【问题讨论】:
-
尝试在调用
AddTime时清除超时。所以当地。当它在本地范围内使用旧值时,它不是 useEffect 的问题,而是超时功能
标签: reactjs react-hooks