如果已经获取数据,如何防止在 Redux 工具包中加载状态

How to prevent loading state in Redux toolkit if the data has already been fetched

如果数据已被获取,我想停止显示加载状态,例如,如果用户访问个人资料页面,并移动到另一个页面,如果用户 returns 到个人资料,则说 Dashboard home页面,我不想再次显示加载状态。

这就是我获取数据的方式

 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';
    });

您可以通过在调用 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';
    });