首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在React中使用setState时,clearInterval无法停止setInterval

在React中使用setState时,clearInterval无法停止setInterval
EN

Stack Overflow用户
提问于 2020-09-30 20:25:27
回答 2查看 54关注 0票数 0
代码语言:javascript
运行
复制
  const handleClick = () => {
    setState({ ...state, on: !state.on });
    let tog = state.on;
    console.log("first" + tog);
    const interval = setInterval(() => {
      if (tog) {
        console.log(tog);
      } else clearInterval(interval);
    }, 1000);
  };

enter image description here这个变量即使是false也不能停止;但是如果我不使用状态,改变到一个变量就不会发生,这对我来说太奇怪了,我需要一些帮助;

代码语言:javascript
运行
复制
let flag = true;
  const handleClick = () => {
    flag = !flag;
    console.log("first" + flag);
   const interval = setInterval(()=>{
     if(flag){
       console.log(flag);
     }else(clearInterval(interval))
   },1000)
  };
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-30 20:30:50

React将在每次重新渲染时创建新的handleClick,并且会有不同的setIntervals,

代码语言:javascript
运行
复制
const intvl = useRef(null);

const handleClick = () => {
    intvl.current = setInterval(() => { //now interval is not changing on every fn recreation
        .....

   clearInterval(intvl.current);
}

check this one

票数 0
EN

Stack Overflow用户

发布于 2020-09-30 21:46:40

您应该使用Effect来处理间隔,如下所示:

代码语言:javascript
运行
复制
  useEffect(() => {
    let intervalId
    if (state.on) { 
      intervalId = setInterval(() => {
        console.log(state.on)
      }, 1000)
      return () => clearInterval(intervalId)
    }
  }, [state.on])

  const handleClick = () => {
    setState({ ...state, on: !state.on });
  };

working code

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64137536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档