【发布时间】:2020-02-10 07:47:35
【问题描述】:
我正在使用 React Context 像这样传入 state 和 setState
const [authContext, setAuthData] = useState({
isAuthenticated: false,
userID:"-1",
email:"test",
name:"test"
});
<AuthContext.Provider value={[authContext,setAuthData]}>
<Router>
<NavbarMenu />
<div className="AllElements">
<Switch>
<Route exact path="/" component={HomePage} />
<Route component={Routes} />
</Switch>
</div>
</Router>
</AuthContext.Provider>
在另一个组件中,我像这样检索它
const [authContext, setAuthData ] = useContext(AuthContext);
const { isAuthenticated } = authContext;
每当我想更新 authContext 时,我都会像这样调用 setAuthData
const HomePage = () => {
if(data && data.login && data.login.token){
console.log("Data token exists");
setAuthData(() => [{
isAuthenticated: true,
userID:data.login.id,
email:data.login.email,
name:data.login.name
}]);
}
return (<div><p>test</p></div>);
};
export default HomePage;
但是,一旦它命中 setAuthData,if {} 中的所有内容都会被多次调用。我一直在控制台中看到多个“数据令牌存在”,直到它错误超出最大更新深度
【问题讨论】:
-
为什么不传递一个函数(更新父组件本身的状态)而不是直接传递 setState?
-
为什么要在主页 comp 中返回
setAuthData内的数组? -
因为我还需要在其他组件中重用 AuthContext。我不想将相同的函数作为道具传递给我想要重用的每个组件。
标签: reactjs react-context