Redux(工具包)保留旧数据

gg0vcinb  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(127)

我在一个react-typescript应用程序中使用redux-toolkit,我有一个在不同组件之间共享数据的通用切片。为了避免数据泄露,我补充道

useEffect(() => {
    return () => {
        dispatch(resetCollectionData());
    };
}, []);

字符串
问题是分派是异步的,所以当新路由被加载时(导航到新路由),我仍然有一小部分时间的旧数据。这使得新路线中断。这是一种保证resetCollectionData()在离开页面之前完成其工作的方法吗?否则,我需要创建几个高度相似的片,或者添加不必要的检查/验证逻辑
调度是否有一个标志,显示操作仍在进行中?类似于RTK查询中的isSuccess或isFetching?

pod7payv

pod7payv1#

允许在切片上添加其他状态

import { createSlice } from '@reduxjs/toolkit';

const commonSlice = createSlice({
  name: 'common',
  initialState: {
    // other state properties
    resetting: false,
  },
  reducers: {
    resetCollectionData: (state) => {
      // reset data logic
    },
    resetCollectionDataStart: (state) => {
      state.resetting = true;
    },
    resetCollectionDataComplete: (state) => {
      state.resetting = false;
    },
  },
});

export const {
  resetCollectionData,
  resetCollectionDataStart,
  resetCollectionDataComplete,
} = commonSlice.actions;

export default commonSlice.reducer;

字符串
然后按如下方式使用

const YourComponent = () => {
  const dispatch = useDispatch();
  const resetting = useSelector((state) => state.common.resetting);

  useEffect(() => {
    dispatch(resetCollectionDataStart());
    dispatch(resetCollectionData());
    dispatch(resetCollectionDataComplete());

    return () => {
      dispatch(resetCollectionData());
    };
  }, [dispatch]);

  if (resetting) {
    return <div>Loading...</div>;
  }

  // Render your component

  return <div>Component Content</div>;
};

相关问题