首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >React中基于状态的无限循环

React中基于状态的无限循环
EN

Stack Overflow用户
提问于 2021-09-19 11:31:31
回答 2查看 52关注 0票数 0

我想用Redux状态切换React组件中的无限循环。这是我到目前为止得到的,但它不能正常工作,因为当状态改变时,它不会停止,因为函数使用了它的旧版本。

代码语言:javascript
运行
复制
const { monitors } = useSelector((state) => state.monitors)

useEffect(() => {
    handleMonitoring(monitors)
}, [monitors])

const handleMonitoring = async () => {
    if (monitors && monitors.filter(monitor => { return monitor.active }).length) {
        await dispatch(watchMonitors(monitors));
        return handleMonitoring()
    }
    else {
        console.log('closed')
        return;
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-20 18:46:10

您必须声明一个额外的变量来确定是否要继续监视。

该变量将被初始化为true,并在cleanup函数中设置为false

代码语言:javascript
运行
复制
const { monitors } = useSelector(state => state.monitors)

useEffect(() => {
    let active = true;
    
    async function handleMonitoring() {
      while(active && monitors && monitors.find(m => m.active)) {
        await dispatch(watchMonitors(monitors));
      }
      console.log('closed');
    }

    handleMonitoring();

    return () => { active = false; };
}, [monitors]);
票数 1
EN

Stack Overflow用户

发布于 2021-09-19 11:56:30

我认为使用递归函数而不是无限循环是更好的想法。

代码语言:javascript
运行
复制
const handleMonitoring = async () => {
  await dispatch(watchMonitors(monitors));
  if(monitors && monitors.filter(monitor => { return monitor.active }).length) {
    return;
  }
  else {
    return handleMonitoring()
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69242831

复制
相关文章

相似问题

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