redux 有没有更优化的方法来处理React组分中的多切片

dvtswwa3  于 2023-02-16  发布在  React
关注(0)|答案(1)|浏览(155)

我为POST和GET操作创建了切片-

export const getAllAnnotationType = createAsyncThunk<IGetAllAnnotationType>(
  "annotationType/getAll",
  async (annotationType, { rejectWithValue }) => {
    try {
      const response = await Services.get("/globalAnnotationTypes");
      return response.data.slice().reverse() as IGetAllAnnotationType;
    } catch (err) {
      const error = err as any;
      return rejectWithValue(error?.response?.data);
    }
  }
);

export const createAnnotationType = createAsyncThunk<
  ICreateAnnotationType,
  { name: string; des: string }
>("annotationType/create", async (annotationType, { rejectWithValue }) => {
  try {
    const { name, des } = annotationType;
    const response = await Services.post("/globalAnnotationTypes", {
      name,
      des,
    });
    return response.data as ICreateAnnotationType;
  } catch (err) {
    const error = err as any;
    return rejectWithValue(error?.response?.data);
  }
});

我为这两个操作创建了一个公共切片。
我把它们用在我的React组件里,就像这样-

useEffect(() => {
    switch (typeLoader) {
      case 'pending':
        setLoader(true);
        break;

      case 'succeeded':
        if (getAllData) {
          dispatch(resetAnnotationType());
          setLoader(false);
          setRows(getAllData);
        }
        if (createData) {
          showToast();
          dispatch(getAllAnnotationType());
          setNoticeMsg(createData);
        }
        break;

      case 'failed':
        showToast();
    }
  }, [typeLoader]);

我正在寻找更优化的方式来使用他们在React组件。在未来,我将有删除和放置操作,我将不得不使用更多的条件内'成功'状态。任何其他方式我可以做到这一点?

rbl8hiat

rbl8hiat1#

我最喜欢的处理获取数据的方法是Redux Toolkit Query。它创建切片。如果需要,您可以自定义获取函数,并为您提供钩子,以便直接在组件中使用。您还可以缓存获取的数据。一个简单的使用示例可以是(在组件中):

const {data, isLoading, error} = useGetDataQuery(args) //if you needed args

如果您对跨应用程序共享缓存数据还有其他问题,可以在这里发表评论,我很乐意分享我是如何解决问题的(使用名为fixedCacheQuery的东西)。
即使你可以在网站上找到样板文件,如果你需要,让我知道,我会编辑这个回应,以分享样板文件,因为我写和使用它。

相关问题