我使用的是REACT/REDUX,下面是用户端点,您可以看到我有一个getUser和一个getSingleUser.在我的应用程序中,当我第一次转到使用getUser查询的UsersList页面时,所有用户都被获取并提供了一个标记,但是当我单击每个单独的用户转到使用getSingleUser的singleUser页面时,我可以看到redux没有从以前缓存的标记中读取用户数据,它再次重新获取用户,并为其提供另一个标记,因此现在我必须为同一用户(65e0ef744995aa9b6b8d1af4[0]和65e0ef744995a9b6b6b8d1daf4[1])标记一个标记,一个标记用于使用getUser获取的用户,另一个用于使用getSingleUser获取的用户.
我如何解决此问题?
import { apiSlice } from "../apiSlice";
const userApiSlice = apiSlice.injectEndpoints({
endpoints: (builder) => ({
getUsers: builder.query ({
query: () => 'user',
providesTags: (result, error, context) => {
if (!error && result) {
return [{type: 'User', id: 'LIST'}, ...result.users.map(user => ({type: 'User', id: user._id}))]
} else {
return [{type: 'User', id: 'LIST'}]
}
}
}),
getSingleUser: builder.query ({
query: (id) => `user/${id}`,
providesTags: (result, error, context) => {
if (result && !error) {
return [{type: 'User', id: result.user._id}]
}
}
}),
getUserBySearch: builder.query ({
query: (search = '') => `user/search?q=${search}`,
providesTags: (result, error, context) => {
if (!error && result) {
return [{type: 'User', id: 'LIST'}, ...result.users.map(user => ({type: 'User', id: user._id}))]
} else {
return [{type: 'User', id: 'LIST'}]
}
},
keepUnusedDataFor: 5,
}),
createUser: builder.mutation({
query: (credentials) => ({
url: 'user',
method: 'POST',
body: credentials,
}),
invalidatesTags: [{type: 'User', id: 'LIST'}]
}),
deleteUser: builder.mutation ({
query: (id) => ({
url: `user/${id}`,
method: 'DELETE'
}),
invalidatesTags: (result, error, context) => {
console.log(`this is result: ${JSON.stringify(result)}`)
if (result?.id && !error) {
return [{type: 'User', id: result.id}]
}
}
})
})
})
export const {
useGetUsersQuery,
useGetSingleUserQuery,
useGetUserBySearchQuery,
useCreateUserMutation,
useDeleteUserMutation
} = userApiSlice;
我期望在使用getUser查询后,立即获得SingleUser数据,而不必等待. 顺便说一句,我正在使用Redux DevTools,这就是为什么我知道同一个标签的两个版本正在被制作