Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.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无法在呈现不同组件(`Header`)时更新组件(`TheLayout`)。在`Header'中查找错误的setState()调用`_Reactjs_React Router - Fatal编程技术网

ReactJs无法在呈现不同组件(`Header`)时更新组件(`TheLayout`)。在`Header'中查找错误的setState()调用`

ReactJs无法在呈现不同组件(`Header`)时更新组件(`TheLayout`)。在`Header'中查找错误的setState()调用`,reactjs,react-router,Reactjs,React Router,我想更新子组件的上下文时遇到了一个问题, 我有一个从服务器获取请求的组件,在子组件中,我导入这个组件,将链接和数据发送到该组件,并获取响应! 我的背景是: import React from 'react' const UserContext = React.createContext(); export default UserContext; 如果我的状态为空,我将在Header组件上向服务器发送一个请求 const Header = () => {

我想更新子组件的上下文时遇到了一个问题, 我有一个从服务器获取请求的组件,在子组件中,我导入这个组件,将链接和数据发送到该组件,并获取响应! 我的背景是:

    import React from 'react'
    const UserContext = React.createContext();
    export default UserContext;
如果我的状态为空,我将在Header组件上向服务器发送一个请求

    const Header = () => {
    useEffect(() => {
    if (!userInfo || typeof userInfo === "undefined")
      requestHandler("/ankavita/panel/kullanici/data", "GET", null);
     console.log("use effect .......");
    }, []);

  const [userInfo, setUserInfo] = useContext(UserContext);
  const { isLoading, isError, data, requestHandler, msg } = MyRequest();
  if (isLoading) {
    console.log("is loading ...");
    return <p>is loaaading</p>;
  } else {
    console.log("loading is over ...");
    setUserInfo(data);
    return <p>Loading is over</p>;
  }
};
export default Header;
const头=()=>{
useffect(()=>{
如果(!userInfo | | typeof userInfo==“未定义”)
requestHandler(“/ankavita/panel/kullanici/data”,“GET”,null);
控制台日志(“使用效果……);
}, []);
const[userInfo,setUserInfo]=useContext(UserContext);
const{isLoading,isError,data,requestHandler,msg}=MyRequest();
如果(孤岛加载){
日志(“正在加载…”);
回报是贷款

; }否则{ 日志(“加载已结束…”); setUserInfo(数据); 返回加载已结束

; } }; 导出默认标题;
我还需要我的布局组件

    const TheLayout = () => {
  const [userInfo, setUserInfo] = React.useState();
  return (
    <>
      <UserContext.Provider value={[userInfo, setUserInfo]}>
        <Header />
        <Navigation />
        <Sidebar />
        <div id="main">
          <div className="row">
            <div className="col s12">
              <div className="container">
                <Switch>
                <Route path="/panel/logout">
                    <Logout />
                  </Route>
                  <Route path="/panel/login">
                    <Login />
                  </Route>
                   
                  <Route component={Page404} />
                  
                </Switch>
              </div>
            </div>
          </div>
        </div>
        <RightSidebar />
        <Footer />
      </UserContext.Provider>
    </>
  );
};
const TheLayout=()=>{
const[userInfo,setUserInfo]=React.useState();
返回(
);
};
当我想更新上下文时,我遇到了这个错误
呈现不同组件(
标题
)时无法更新组件(
布局
)。要在
标题中找到错误的setState()调用,在渲染组件期间不应执行副作用。
在Header中,您调用setUserInfo,它有一个副作用:更新布局状态。

您应该将setUserInfo包装到useEffect钩子中。

我这样做了,并修复了错误,但现在我没有得到任何响应。我认为我的效果函数必须等待http请求组件的响应,对吗?如果没有看到整个代码,很难说。您应该确保MyRequest被触发,并且它将结果分配到有用的地方,例如:在Header状态。快乐编码!