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状态。快乐编码!