reactjs - 登录后在 Context 中加载 API 数据
问题描述
我有一堆组件,它们的状态驻留在 Context API 中。
// App.js
const App = () => {
return (
<BrowserRouter>
<MarketContextProvider>
<Route path="/login" component={Login} />
<Route path="/" component={Home} />
<Route path="/products" component={Products} />
<Route path="/orders" component={Orders} />
</MarketContextProvider>
</BrowserRouter>
);
};
// context.js
export const MarketContext = createContext();
const MarketContextProvider = (props) => {
const [data, setData] = useState([]);
useEffect(() => {
// fetch data from API and store
const myData = await getData();
setData(myData);
}, [])
return (
<MarketContext.Provider value={{data}}>
{props.children}
</MarketContext.Provider>
)
}
问题是,一旦用户加载登录页面,Context 就会触发,并且所有 API 调用都会导致 401,因为用户尚未登录。当用户最终登录时,组件(主页、产品、订单)不会显示任何数据,因为它们仍在引用陈旧的上下文。
用户必须在登录后最终刷新页面才能加载数据。这样,上下文中的 API 调用成功触发。
如何避免此问题并仅在用户登录后在 Context 中加载数据?
解决方案
推荐阅读
- python - 如何将文件加载到项目中,以便我可以在任何机器上打开它而无需更正文件路径?(在 PYcharm 上工作)
- python - 为什么这种并行搜索和替换不使用 100% 的 CPU?
- ios - 解析 iOS URL 书签数据最终开始失败
- php - PHP在创建缩略图和上传之前从移动设备修复图像方向
- android - React-Native Actioncable 在 Android 平台上无法使用 wss(超过 tls1.2)连接。
- symfony - 使用 DateType 在 Symfony 的表单中创建/编辑模式中的默认数据
- python - 如何从可能为空值的列表列表中生成字典?
- blockchain - 确认比特币交易
- python - 比较两列后 Pandas 计数器递增
- vb.net - 在客户机器上部署带有水晶报表的 vb.net 2017 应用程序