为啥错误:重新渲染太多。 React 限制了渲染的数量以防止无限循环。?

Posted

技术标签:

【中文标题】为啥错误:重新渲染太多。 React 限制了渲染的数量以防止无限循环。?【英文标题】:why Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.?为什么错误:重新渲染太多。 React 限制了渲染的数量以防止无限循环。? 【发布时间】:2022-01-14 00:58:42 【问题描述】:

错误:重新渲染过多。 React 限制渲染次数以防止无限循环 如何解决此问题以防止无限渲染?

不要将 ()=> 放在多个位置。

export default function Test1() 
  const [ref, inView] = useInView( threshold: 0, triggerOnce: true );
  const [num, setNum] = useState(10);
  console.log(ref);

  if (inView) 
    setNum(num + 10);
    // console.log(num + 10);
  

  return (
    <div>
      <Diiv1>123</Diiv1>
      <Diiv2 ref=ref>Element inView.toString()</Diiv2>
      <Diiv3>789</Diiv3>
    </div>
  );

const Diiv1 = styled.div`
  width: 100%;
  height: 1500px;
  background-color: blue;
`;

const Diiv2 = styled.div`
  width: 100%;
  height: 1500px;
  background-color: red;
`;

const Diiv3 = styled.div`
  width: 100%;
  height: 1500px;
  background-color: blue;
`;


【问题讨论】:

【参考方案1】:

将其移至 useEffect

useEffect(()=>
  if (inView) 
    setNum(num + 10);
    // console.log(num + 10);
  
,[num,ref])


更新: 实际上,您应该这样做:

  useEffect(() => 
    if (ref.threshold) 
      setNum(num + 10);
      // console.log(num + 10);
    
  , [ref,numb]);

【讨论】:

这行不通.. .. .. . ... . . . 你能给我 useInView 钩子吗?

以上是关于为啥错误:重新渲染太多。 React 限制了渲染的数量以防止无限循环。?的主要内容,如果未能解决你的问题,请参考以下文章

我有一个错误:重新渲染太多。 React 限制渲染次数以防止无限循环

太多的重新渲染。 React 限制了渲染的数量以防止无限循环。?

即使状态没有改变,为啥 setState 会导致太多的重新渲染错误

“错误:重新渲染过多。React 限制了渲染次数以防止无限循环。”

错误:重新渲染过多。 React 限制了渲染的数量以防止无限循环。即使使用箭头函数

收到此错误:错误:重新渲染过多。 React 限制渲染次数以防止无限循环