javascript - 取消卸载时的 API 调用
问题描述
当我在卸载时取消 API 调用并再次访问同一页面时,不会再次调用 API。
const cancelToken = axios.CancelToken;
export const signal = cancelToken.source();
我在我的 baseconfig.js 中为 Axios 使用它,我的组件在 useEffect 中有这个
useEffect(() => {
return () => {
props.dispatch({
type: LEAVE_PAGE,
});
console.log("Unmounting");
signal.cancel();
};
},[]);
一旦我离开页面或组件被卸载,API 就会被取消,但再次访问时,被取消的 API 不会被调用。我对所有 api 使用相同的令牌。
解决方案
你在export const signal = cancelToken.source();
上面写过。这对我来说意味着您正在创建一个全局信号,在组件外部,但在组件内对其进行变异(例如通过取消它)。
相反,您应该在组件中实例化此信号并在那里使用它。这样,每次安装组件时,您都会收到一个新信号。您可以使用 eg 确保不会在每次重新渲染时创建新信号useMemo
。考虑:
const YourComponent = (props) => {
const signal = useMemo(() => axios.CancelToken.source(), []);
useEffect(() => {
return () => {
props.dispatch({
type: LEAVE_PAGE,
});
console.log("Unmounting");
signal.cancel();
};
}, []);
...
};
推荐阅读
- pandas - 大熊猫中的分组总和
- java - 在 pluginManagement 元素中声明的 maven 插件适用于当前 pom
- javascript - 录制音频 NodeJS
- r - R唯一多元整数样本
- python - 找不到 pyenv 命令 - Jupyter 笔记本
- java - 从Activity设置片段EditeText的文本
- r - 在 R 中的不同列表上使用 lapply
- azure-devops-migration-tools - TFS wok items 迁移到 DevOps 的问题
- angularjs - 如何在Angular材质嵌套菜单中获取所选菜单的整个路径
- reactjs - React Redux 用于打开多个应用程序实例