英文:
how can I access my store from RTK-Query endpoints?
问题
我想要在rtk-query端点内访问我的redux-toolkit存储数据。
我如何从query或transformResponse方法中访问我的存储?
英文:
I want to access to my redux-toolkit store data inside of the rtk-query endpoints.
how can I access my store from query or transformResponse methods?
import { createApi } from '@reduxjs/toolkit/query/react'
import customFetchBase from './customFetchBase.js'
import { setUserInfo, setUserPermissions } from '../features/userSlice.js'
import { aesDEC } from 'src/util/public.util.js'
export const authApi = createApi({
reducerPath: 'authApi',
baseQuery: customFetchBase,
endpoints: builder => ({
getUser: builder.mutation({
query: () => ({
url: '/Account/Login/GetUserInfo',
method: 'POST',
body: {
RequestVerificationToken: salt //here I want the salt from my redux store
}
}),
transformResponse: response => {
return aesDEC(response.data, salt); //here I want the salt from my redux store
},
}),
})
export const { useGetUserMutation } = authApi
答案1
得分: 2
query 和 transformResponse 都无法直接访问Redux状态,但是你可以用 queryFn 来替代它们,queryFn 允许你访问Redux状态。使用 queryFn 时,传递给查询函数的参数包括查询 arg,基础查询 api 对象,任何定义的 extraOptions,以及 baseQuery 函数。使用 api.getState 来访问当前的状态值。
示例,你的代码可能类似于以下内容:
export const authApi = createApi({
reducerPath: 'authApi',
baseQuery: customFetchBase,
endpoints: builder => ({
getUser: builder.mutation({
queryFn: async (arg, api, extraOptions, baseQuery) => {
const state = api.getState();
const salt = state./* 访问盐值状态的路径 */;
try {
const { data } = await baseQuery({
url: '/Account/Login/GetUserInfo',
method: 'POST',
body: {
RequestVerificationToken: salt
}
});
return { data: aesDEC(data, salt) };
} catch(error) {
return { error };
}
},
}),
})
});
英文:
Neither query nor transformResponse have direct access to the Redux state, however, you can replace both with the queryFn which does. With queryFn the query function used is passed the query arg, the base query api object, any defined extraOptions, and the baseQuery function. Use api.getState to access the current state value.
Example, your code might look similar to the following:
export const authApi = createApi({
reducerPath: 'authApi',
baseQuery: customFetchBase,
endpoints: builder => ({
getUser: builder.mutation({
queryFn: async (arg, api, extraOptions, baseQuery) => {
const state = api.getState();
const salt = state./* path to salt state value */;
try {
const { data } = await = baseQuery({
url: '/Account/Login/GetUserInfo',
method: 'POST',
body: {
RequestVerificationToken: salt
}
});
return { data: aesDEC(data, salt) };
} catch(error) {
return { error };
}
},
}),
})
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论