Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 问题:重新渲染的次数太多。请尝试使用按钮和状态挂钩来渲染组件_Reactjs_React Hooks - Fatal编程技术网

Reactjs 问题:重新渲染的次数太多。请尝试使用按钮和状态挂钩来渲染组件

Reactjs 问题:重新渲染的次数太多。请尝试使用按钮和状态挂钩来渲染组件,reactjs,react-hooks,Reactjs,React Hooks,我是一个新的反应和面对以下问题: 我有两个按钮,想渲染两个不同的组件。按下一个按钮应通过状态挂钩将变量设置为true,并应显示第一个组件,另一侧的另一个组件的变量应设置为false。使用此逻辑,我尝试渲染一个或另一个组件 通过此设置,我收到以下错误消息: 重新渲染的次数太多。React限制渲染的数量以防止无限循环。 我想解决办法很简单,但我不明白为什么会出现问题。 谢谢你的帮助 以下是相关代码的简化版本: import { Button } from "semantic-ui-react"; i

我是一个新的反应和面对以下问题: 我有两个按钮,想渲染两个不同的组件。按下一个按钮应通过状态挂钩将变量设置为true,并应显示第一个组件,另一侧的另一个组件的变量应设置为false。使用此逻辑,我尝试渲染一个或另一个组件

通过此设置,我收到以下错误消息:

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

我想解决办法很简单,但我不明白为什么会出现问题。 谢谢你的帮助

以下是相关代码的简化版本:

import { Button } from "semantic-ui-react";
import React, { useState } from "react";

const App = () => {
  const [showAggregated, setshowAggregated] = useState(true);
  const [showDetailed, setshowDetailed] = useState(false);
  return (
    <div>
      Test
      <Button.Group>
        <Button
          size="mini"
          onClick={(() => setshowAggregated(true), setshowDetailed(false))}
        >
          Aggregated Visualization{" "}
        </Button>
        <Button.Or />
        <Button
          size="mini"
          onClick={(() => setshowDetailed(true), setshowAggregated(false))}
        >
          Detailed Visualization
        </Button>
      </Button.Group>
      {/* Second Part of Page if Aggregated Component */}
      {showAggregated && <div>Aggregated</div>}
      {/* Second Part of Page if Detailed Component */}
      {showDetailed && <div>Detailed</div>}
    </div>
  );
};

export default App;
import{Button}来自“语义ui反应”;
从“React”导入React,{useState};
常量应用=()=>{
const[showcolgregated,setshowcolgregated]=useState(true);
const[showDetailed,setshowDetailed]=使用状态(false);
返回(
试验
setshowAggregated(true),setshowDetailed(false))}
>
聚合可视化{“}
setshowDetailed(true),setshowAggregated(false))}
>
详细可视化
{/*如果聚合组件,则为页面的第二部分*/}
{showAggregated&&Aggregated}
{/*页面的第二部分,如果详细组件*/}
{showDetailed&&Detailed}
);
};
导出默认应用程序;
您使用的是上文,它计算每个操作数

在本例中,您有两个操作数:
()=>setshowDetailed(true)
setshowAggregated(false)
,因此基本上每次渲染组件时,都会调用第二个操作数(
setshowAggregated(false)
),重新渲染最终进入无限循环的组件

您真正想做的是(调用两个函数的事件处理程序):

第二个按钮也是一样

onClick={(() => setshowDetailed(true), setshowAggregated(false))}
onClick={() => {
   setshowDetailed(true);
   setshowAggregated(false));
}}