如何在RTK-Query的端点中访问Redux Toolkit存储?
在RTK Query端点中访问Redux Store数据
以下是两种可行的实现方案,结合你的代码示例给出具体修改:
方案1:使用queryFn替代query(推荐,直接访问Store)
RTK Query的mutation支持通过queryFn替代query字段,queryFn会接收包含getState的参数,可直接获取Redux Store中的数据,同时能在同一逻辑里处理请求和响应解密。
修改代码如下:
import { createApi } from '@reduxjs/toolkit/query/react' import customFetchBase from './customFetchBase.js' import { aesDEC } from 'src/util/public.util.js' export const authApi = createApi({ reducerPath: 'authApi', baseQuery: customFetchBase, endpoints: builder => ({ getUser: builder.mutation({ queryFn: async (_, { getState, baseQuery }) => { // 从Store中获取salt(路径根据你的实际slice结构调整) const { salt } = getState().user; // 调用baseQuery发起请求 const requestResult = await baseQuery({ url: '/Account/Login/GetUserInfo', method: 'POST', body: { RequestVerificationToken: salt } }); // 请求成功时解密响应数据 if (requestResult.data) { const decryptedData = aesDEC(requestResult.data.data, salt); return { data: decryptedData }; } // 请求失败时直接返回错误结果 return requestResult; }, }), }) }) export const { useGetUserMutation } = authApi
方案2:通过BaseQuery传递Store数据
若希望保留query字段,可以修改自定义customFetchBase,让它获取Store数据并附加到请求上下文,再在query和响应处理中使用。
第一步:修改customFetchBase
// customFetchBase.js import { fetchBaseQuery } from '@reduxjs/toolkit/query/react'; export default async (args, api, extraOptions) => { const baseQuery = fetchBaseQuery({ baseUrl: '/your-base-url' }); const result = await baseQuery(args, api, extraOptions); // 将salt附加到响应meta中,供transformResponse使用 if (result.meta) { result.meta.salt = api.getState().user.salt; } return result; };
第二步:更新端点配置
getUser: builder.mutation({ query: (_, { getState }) => { // 从Store获取salt并拼接请求体 const { salt } = getState().user; return { url: '/Account/Login/GetUserInfo', method: 'POST', body: { RequestVerificationToken: salt } }; }, transformResponse: (response, meta) => { // 从meta中获取salt并解密响应 return aesDEC(response.data, meta.salt); }, }),
注意事项
- 确保Store数据的路径正确(示例中为
getState().user.salt,需根据你的实际slice结构调整) - 敏感数据如
salt需注意传输和使用过程中的安全性,避免泄露
内容的提问来源于stack exchange,提问作者Alireza Kordkheili
相关产品推荐
相关产品推荐

