0

像这个例子: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}`)
      },
    }),
  }),
})
4

1 回答 1

1

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

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

依赖查询可能最好在具有两个useQuery钩子调用的自定义钩子中处理,其中第二个钩子调用从第一个调用中获取部分结果作为参数。

于 2021-11-22T11:19:07.883 回答