英文:
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 };
}
},
}),
})
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论