javascript - 无法访问间隔内的状态

标签 javascript reactjs react-hooks

我无法在一个时间间隔内访问状态。在这里,我想在计数器等于 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/

相关文章:

javascript - 匹配括号中是否包含文本 - 正则表达式

javascript - 无法使用 NPM 安装 opensea-js

reactjs - 在 ReactJS 和 Webpack 中导入 materialdesignicons 包

javascript - 为什么useDispatch会重新渲染父组件?

reactjs - 使用 React Hooks 更新值

reactjs - React Hooks - 如何测试全局提供者的更改

php - jQuery get,从php接收一个int值?

javascript - 如何抑制此 JavaScript 错误 : Exception : TypeError: $ ("j2t-temp-div"). down (".j2t_ajax_message") is undefined?

css - (Next.js) 如何在 next/image 中更改 SVG 的颜色?

javascript - 从同一类中的另一个方法访问一个方法,该方法作为 props 传递给另一个类