【问题标题】:Process fetched data - RTK Query / Redux toolkit / React处理获取的数据 - RTK Query / Redux 工具包 / React
【发布时间】:2021-10-15 14:01:18
【问题描述】:

我对所有提到的技术都是新手,我试图了解在这种情况下我应该如何操作:我试图从 API 获取 CSV 文件,一旦检索到我想处理它以将其转换为一个类似 json 的对象,然后我可以在我的一个组件中使用它。 例如,我想在表中查看这些数据并对这些数据执行操作,这会导致该数据的状态发生变化。

根据文档,定义的每个端点都有一个 transformResponse 字段,我可以使用它来规范化我的应用程序所需的数据:

const api = createApi({
  baseQuery: fetchBaseQuery({
    baseUrl: '/',
  }),
  tagTypes: ['Post'],
  endpoints: (build) => ({
    getPost: build.query<Post, number>({
      // note: an optional `queryFn` may be used in place of `query`
      query: (id) => ({ url: `post/${id}` }),
      // Pick out data and prevent nested properties in a hook or selector
      transformResponse: (response: { data: Post }) => response.data,
      ...

这可以工作,但我会对如何调度操作来更改此状态感到有些困惑。

另一种解决方案是使用 Redux Toolkit 存储切片来保存获取的数据并执行转换操作和调度操作。

任何帮助都会很棒!

【问题讨论】:

    标签: reactjs react-redux redux-toolkit rtk-query


    【解决方案1】:

    RTK Query 状态并不意味着是在客户端本地更改的状态 - RTK Query 是一个纯粹的缓存。

    它适用于您的工作流程

    • 从服务器获取数据
    • 显示该数据
    • 向服务器发送更改请求
    • 从服务器获取新数据
    • 再次显示该数据

    RTK-Query 的目的是让该过程对您来说尽可能简单,并接管诸如在服务器上触发更改后自动重新获取以及从缓存中删除旧值等内容。

    如果您想将数据保存在本地以对其进行本地更改,您应该使用传统切片。

    【讨论】:

    • 我明白了,谢谢你的解释。那么你会建议做什么呢?正常 fetch 或 axios 请求,然后像您建议的那样使用存储切片?
    • 如果您的所有其他 api 交互都遵循上述模式,您可以使用 RTK-query 并使用 extraReducer 将数据复制到您的切片中,以便一次性完成。否则,RTK-Query 不适合你,你需要坚持经典的正常 fetch -> 手动将数据放入 slice 的方式。
    • @phry RTKQ 的伟大之处在于它如何将所有提取管理都排除在外,因此尽管它“浪费”了所有其他出色的缓存功能,但它看起来就像使用 RTKQ 提取并使用使用 extraReducer 在本地获取数据是设置应用程序的一种相当不错的方式,即使它不是 RTKQ 的确切预期用例。
    • 是的,但它现在也让诸如“我什么时候从我的切片中删除它”之类的事情再次 100% 由您决定,但最终使实际这样做变得更加困难。因此,对于复制一点点,我会说没关系,但我不会在此基础上构建完整的应用程序。
    猜你喜欢
    • 2021-12-19
    • 2022-10-07
    • 2023-01-15
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 2022-11-19
    相关资源
    最近更新 更多