
在构建基于redux toolkit query (rtk-query) 的数据获取层时,开发者有时需要在api端点定义内部访问当前的redux store状态。例如,请求体中可能需要包含来自store的认证令牌、用户id或特定配置参数,或者在响应数据转换时需要store中的密钥。
然而,RTK-Query的builder.query或builder.mutation中常用的query和transformResponse方法,其设计初衷是为了纯粹地处理请求参数和响应数据,并不直接提供访问Redux Store状态的机制。这意味着,如果尝试在这些方法中直接引用state对象,将会遇到访问权限的问题。
为了解决在RTK-Query端点中访问Redux Store状态的需求,RTK-Query提供了更为强大的queryFn选项。queryFn允许开发者完全控制请求的执行逻辑,它替代了默认的query和transformResponse,提供了更深层次的灵活性。
queryFn函数签名如下: async (arg, api, extraOptions, baseQuery) => { ... }
其中,关键在于api对象。api对象包含多个实用工具,其中最重要的是api.getState()方法。通过调用api.getState(),我们可以获取到当前的Redux Store完整状态树的快照,从而访问其中存储的任何数据。
以下示例展示了如何使用queryFn在API请求体和响应数据转换中获取并使用Redux Store中的salt值:
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, // 使用自定义的baseQuery
endpoints: builder => ({
getUser: builder.mutation({
// 使用 queryFn 替代 query 和 transformResponse
queryFn: async (arg, api, extraOptions, baseQuery) => {
// 1. 通过 api.getState() 访问 Redux Store 状态
const state = api.getState();
// 假设 salt 存储在 Redux Store 的 userSlice 下
const salt = state.user.salt; // 请根据您的实际 Store 结构调整路径
try {
// 2. 使用 baseQuery 发起实际的 HTTP 请求
const { data, error } = await baseQuery({
url: '/Account/Login/GetUserInfo',
method: 'POST',
body: {
RequestVerificationToken: salt // 在请求体中使用从 Store 获取的 salt
}
});
// 3. 处理响应数据
if (error) {
return { error }; // 如果 baseQuery 返回错误,则直接返回
}
// 在 transformResponse 逻辑中,使用从 Store 获取的 salt 进行解密
return { data: aesDEC(data, salt) };
} catch (error) {
// 4. 捕获并返回潜在的运行时错误
return { error: { status: 'CUSTOM_ERROR', message: error.message } };
}
},
}),
})
});
export const { useGetUserMutation } = authApi;代码解析:
当RTK-Query的query和transformResponse方法无法满足在API端点中访问Redux Store状态的需求时,queryFn提供了一个强大而灵活的替代方案。通过queryFn函数签名中提供的api对象及其getState()方法,开发者可以轻松地获取并利用Store中的任何状态值,从而实现更精细的请求控制和数据处理逻辑。正确地使用queryFn,能够极大地增强RTK-Query端点的功能性和适应性。
以上就是RTK-Query中访问Redux Store状态:queryFn方法指南的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号