reactjs - 如何正确设置获取标志
问题描述
我正在尝试设置获取标志,但我遇到了问题。
我有一个获取状态值
status: 'idle' | 'loading' | 'succeeded' | 'failed'
另外,我有一个 thunk,我将状态设置为正在加载,然后在加载数据时将其设置为成功,并在 catch 中设置为失败。
export const getProducts = () => async dispatch => {
try {
dispatch(setFetchingStatus('loading'))
const response = await productsAPI.getProducts()
dispatch(setProducts(response))
dispatch(setFetchingStatus('succeeded'))
} catch {
dispatch(setFetchingStatus('failed'))
}
}
然后在 UI 我有一些简单的检查
if(fetchingStatus === 'loading') return (<div>Loading...</div>)
else if(fetchingStatus === 'succeeded') return (<div>Content...</div>)
else if(fetchingStatus === 'failed') return (<div>Error...</div>)
问题是,当我将一个组件从 Products 更改为 Cart 时,一开始我的获取状态等于成功。发生这种情况是因为成功加载数据时设置的最后一个状态是成功的。我正在使用反应路由器。我有一个想法,可以在使用 useEffect 卸载组件时将状态设置为空闲,但在我看来这不是正确的方法。
解决方案
推荐阅读
- r - Shiny R get access to colleagues without needing to download the data
- c# - Prevent checkbox (or InputCheckBox) to be unchecked - Blazor
- html - 为什么子 div 占用父 div 的 100% 高度并显示:网格
- postgresql - 将列的所有元素放入同一个数组(postgresql)
- python - 我如何找出 python 类中的哪些属性是可调用的?
- node.js - 使用管道中的数组中的对象值执行 $lookup
- visual-studio-code - 当我第一次打开它时,我的 VSCode 每次都会显示这个错误。任何人都可以帮助我吗?
- javascript - 赛普拉斯:如何检查字符串插值是否包含数组中的任何值
- firebase - Firebase 托管 - 托管的 Flutter 应用程序未在某些设备中加载
- javascript - 在哪里可以找到带有 API 和网站广告集成的自定义视频播放器?