太多的重新渲染.React 限制渲染次数以防止无限循环.- 反应钩子 [英] Too many re-renders. React limits the number of renders to prevent an infinite loop. - React Hooks

查看:449
本文介绍了太多的重新渲染.React 限制渲染次数以防止无限循环.- 反应钩子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 React 钩子的新手,我有一个侧边栏,我想将 selecetedIndex 更新为为该 ListItem 即,当我选择一个项目时,我想将 selectedIdx 更新为索引以显示它被选中.我做错了什么.

I'm new to React hooks here, I've a sidebar I want to update the selecetedIndex to the index selected for that ListItem i.e., when I select an item I want to update selectedIdx to index to show it selected. I'm doing something wrong.

      <ListItem button key={index}
                selected={selectedIdx===index} // to show selected need to update
                onclick={setSelectedIdx(index)}
              >
                  <ListItemIcon>{v.icon}</ListItemIcon>
                  <ListItemText primary={v.text} />
      </ListItem>


 let [selectedIdx,setSelectedIdx]=React.useState(0);

这样我第二次尝试但没有结果:

This way second try I did but not results:

         <ListItem button key={index}
                        selected={selectedIdx===index}
                        onclick={handleSelectedIdx(index)}
                      >
                          <ListItemIcon>{v.icon}</ListItemIcon>
                          <ListItemText primary={v.text} />
         </ListItem>

function handleSelectedIdx(i){
    setSelectedIdx(i)}

我是新手,不知道如何在钩子中执行 this.setState.它失败的两种方式都可以让我知道我是否出错了.任何帮助表示赞赏.

I'm new I don't know how do we do this.setState in hooks. Both the ways it failed can anyone please let me know were I'm going wrong. Any help appreciated.

更新:这里我不使用:

{()=>{handleDrawerToggle}}

以下仍然有效,为什么会这样?你能告诉我们吗?

Still the following works why is that so? Can you please let us know?

<IconButton
        color="inherit"
        aria-label="Open drawer"
        edge="start"
        onClick={handleDrawerToggle}
        className={classes.menuButton}
      />

   function handleDrawerToggle() {
      setMobileOpen(!mobileOpen);  }

  const [mobileOpen, setMobileOpen] = React.useState(false);

推荐答案

您代码中的问题是您没有将函数传递给 onClick,而是由 handleSelectedIdx/setSelectedIdx 返回的值,因为您设置了一个触发重新渲染的状态,导致该函数在下一次渲染时再次执行.React 内部会阻止此循环并警告您.

The problem in you code is that you are not passing a function to onClick, rather a value returned by handleSelectedIdx/setSelectedIdx and since you set a state a re-render is triggered causing the function to execute again on the next render. React internally prevents this loop and warns you.

解决方案是像这样写你的onclick

The solution is to write your onclick like

onClick={() => handleSelectedIdx(index)}

甚至

onClick={() => setSelectedIdx(index)}

这篇关于太多的重新渲染.React 限制渲染次数以防止无限循环.- 反应钩子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆