【问题标题】:How to ensure that the request has been sent before manually reading the cache?在手动读取缓存之前如何保证请求已经发送?
【发布时间】:2021-12-31 22:55:08
【问题描述】:

像这个例子:constructing-a-dynamic-base-url-using-redux-state,我需要从缓存中获取某个端点的数据来构建fetch arg,我可以通过api.endpoints.getPost.select(postId)(getState())获取数据,但是如何确保getPost请求已经发送了吗?

const api = createApi({
  baseQuery: fetchBaseQuery(),
  endpoints: (builder) => ({
    getPost: builder.query({
      query: (id) => `/posts/${id}`,
    }),
    getBook: builder.query({
      async queryFn(postId, { dispatch, getState }) {
        // could I use this?
        await dispatch(api.endpoints.getPost.initiate(postId))
        const { data: post } = api.endpoints.getPost.select(postId)(getState())
        // ...
        // use post.xxx to fetch books...
        myFetch(`/books/${post.xxx}`)
      },
    }),
  }),
})

【问题讨论】:

    标签: rtk-query rtk


    【解决方案1】:

    在当前的 RTK 1.7 测试版中,您只需 const result = await dispatch(api.endpoints.getPost.initiate(postId)).unwrap()

    但是你在这里所做的通常看起来很危险。在getPost 将来返回不同的结果之后,没有任何机制可以重新运行getBook。事情可能会以这种方式不同步。

    相关查询最好在自定义钩子中处理,其中包含两个 useQuery 钩子调用,其中第二个钩子调用从第一个调用中获取部分结果作为参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-04
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2022-08-17
      • 1970-01-01
      • 2019-09-04
      相关资源
      最近更新 更多