如果資料已被獲取,我想停止顯示加載狀態,例如,如果用戶訪問個人資料頁面,并移動到另一個頁面,如果用戶回傳個人資料頁面,請說儀表板主頁,我不想顯示再次加載狀態。
這就是我獲取資料的方式
const { status, data } = useSelector((state) => state.profile);
useEffect(() => {
dispatch(fetchProfile());
}, [dispatch]);
如果status === loading,我顯示加載器,如果fulfilled,我顯示data
減速機
builder.addCase(fetchProfile.fulfilled, (state, { payload }) => {
state.profile.status = 'fulfilled';
state.profile.data = payload.data;
});
builder.addCase(fetchProfile.pending, (state) => {
state.profile.status = 'loading';
});
builder.addCase(fetchProfile.rejected, (state) => {
state.profile.status = 'error';
});
uj5u.com熱心網友回復:
您可以通過在呼叫 API 之前檢查資料或檢查資料是否已經存在于 API 掛起狀態來實作它
方法一 呼叫API前檢查資料
只呼叫一次API(此方法API不會再次呼叫,資料也不會重繪 )
const { status, data } = useSelector((state) => state.profile);
useEffect(() => {
if(!data) { //You can additionally check `data.userId` if needed
dispatch(fetchProfile());
}
}, [dispatch]);
方法二 檢查資料是否已經在API掛起狀態
在這種方法中,資料將在后臺更新而不顯示加載
檢查資料是否已經存在于暫掛狀態。
builder.addCase(fetchProfile.pending, (state) => {
state.profile.status = state.profile.data ? 'loading' : 'Data is already loaded';
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/338461.html
