【发布时间】:2021-10-05 08:07:25
【问题描述】:
我无法从子组件更新我的上下文对象。这是我用于创建反应上下文的提供程序文件,该组件被包裹在根 app.tsx 文件中的整个应用程序中。
我可以在子组件中获取上下文,但我不知道如何更新它。
const CorporateContext = React.createContext(undefined);
export const useCorporateContext = () => {
return useContext(CorporateContext);
};
export const CorporateProvider = ({ children }) => {
const [corporateUserData, setCorporateUserData] = useState(undefined);
useEffect(() => {
const localStorageSet = !!localStorage.getItem('corporateDetailsSet');
if (localStorageSet) {
setCorporateUserData({corporateId: localStorage.getItem('corporateId'), corporateRole: localStorage.getItem('corporateRole'), corporateAdmin: localStorage.getItem('corporateAdmin'), corporateSuperAdmin: localStorage.getItem('corporateSuperAdmin')});
} else {
(async () => {
try {
const json = await
fetchCorporateUserDetails(getClientSideJwtTokenCookie());
if (json.success !== true) {
console.log('json invalid');
return;
}
setCorporateUserData({corporateId: json.data.corporate_id, corporateRole: json.data.corporate_role, corporateAdmin: json.data.corporate_role == 'Admin', corporateSuperAdmin: json.data.corporate_super_admin});
addCorporateDetailsToLocalStorage(corporateUserData);
} catch (e) {
console.log(e.message);
}
})();
}
}, []);
return (
<CorporateContext.Provider value={corporateUserData}>
{children}
</CorporateContext.Provider>
);
};
export default CorporateProvider;
更新:这是我更改的内容,上下文似乎已更新(至少在我签入 chrome devtools 时它看起来已更新)但子组件未重新渲染,一切都保持不变:
我将反应上下文更改为:
const CorporateContext = React.createContext({
corporateContext: undefined,
setCorporateContext: (corporateContext) => {}
});
更改了组件中的 useState 钩子:
const [corporateContext, setCorporateContext] = useState(undefined);
将 setState 作为属性传递给上下文:
<CorporateContext.Provider value={{corporateContext , setCorporateContext}}>
{children}
</CorporateContext.Provider>
【问题讨论】:
标签: reactjs react-context