在手动读取缓存之前如何确保请求已经发送?
How to ensure that the request has been sent before manually reading the cache?
像这个例子: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 1.7 测试版中,您可以 const result = await dispatch(api.endpoints.getPost.initiate(postId)).unwrap()
。
但是你在这里做的事情通常看起来很危险。没有任何机制可以在 getPost
returns 之后重新 运行 getBook
一个不同的结果。这样事情可能会不同步。
依赖查询最好在具有两个 useQuery
钩子调用的自定义钩子中处理,其中第二个钩子调用从第一次调用中获取部分结果作为参数。
像这个例子: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 1.7 测试版中,您可以 const result = await dispatch(api.endpoints.getPost.initiate(postId)).unwrap()
。
但是你在这里做的事情通常看起来很危险。没有任何机制可以在 getPost
returns 之后重新 运行 getBook
一个不同的结果。这样事情可能会不同步。
依赖查询最好在具有两个 useQuery
钩子调用的自定义钩子中处理,其中第二个钩子调用从第一次调用中获取部分结果作为参数。