我无法在一个时间间隔内访问状态。在这里,我想在计数器等于 10 时访问间隔内的计数器,我想停止它。
注意:这里我不想在 useEffect 中放置间隔,因为我需要通过处理事件在特定时间开始间隔。
export default props => {
const [counter, setCounter] = useState(0);
const startInterval = () => {
const timeout = setInterval(() => {
setCounter(counter + 1);
console.log("counter: ", counter); // alway return 0
if(counter === 10) clearInterval(timeout);
}, 1000);
};
}
最佳答案
正如我在这里看到的,由于词法范围的原因,即使您的 setCounter(counter+1)
也不会更新。所以你必须这样改变它:
setCounter(counter => counter + 1);
另外,由于词法范围,您不会访问计数器来检查条件,因此您必须创建一个变量并通过向其分配计数器来更新功能组件内部的变量,然后使用 if 条件检查它。
完整的Code代码:
let myCounter = 0;
let timeout = null;
export default CounterApp = props => {
const [counter, setCounter] = useState(0);
// Also don't forget this
useEffect(()=> {
return ()=> clearInterval(timeout);
}, []);
myCounter = counter;
const startInterval = () => {
timeout = setInterval(() => {
setCounter(counter => counter + 1);
console.log("counter: ", myCounter); // counter always return 0 but myCounter the updated value
if(myCounter === 10) clearInterval(timeout);
}, 1000);
};
}
关于javascript - 无法访问间隔内的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516117/