【发布时间】:2022-01-11 02:48:49
【问题描述】:
我希望以下代码在用户登录后从一个数字开始倒计时。
下面的代码在console.log中每秒显示简单的0,但似乎没有将状态变量secondsLeft设置为8,也没有将这个变量倒数。
const [secondsLeft, setSecondsLeft] = useState(0);
...
const handleButton = async () => {
const response = await fetch('http://localhost:5001/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password })
});
setUsername('');
setPassword('');
if (response.ok) {
const data = await response.json();
setCurrentUser(prev => ({ ...prev, ...data.user }));
setMessage(`User: ${currentUser.firstName}`);
setSecondsLeft(8);
setInterval(() => {
setSecondsLeft(prev => secondsLeft -1);
console.log(secondsLeft);
}, 1000);
} else {
setMessage('bad login');
}
}
如何让 setInterval 每秒减少 secondsLeft 的值?
【问题讨论】:
-
改用
setSecondsLeft(prev => prev -1)怎么样?
标签: javascript reactjs setinterval