
在使用 rtk-query 构建数据获取层时,我们通常会定义 endpoints,其中包含 query 或 mutation 方法。这些方法内部可以进一步定义 query 函数来构造请求参数,以及 transformresponse 函数来处理响应数据。然而,query 和 transformresponse 函数的设计初衷是专注于请求和响应的直接转换,它们并没有直接提供访问 redux store 完整状态的能力。
例如,在以下场景中,如果我们需要 Redux Store 中的某个值(如 salt)来构建请求体或解密响应数据,query 和 transformResponse 将无法直接满足需求:
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 // 此处需要 Redux Store 中的 salt
}
}),
transformResponse: response => {
return aesDEC(response.data, salt); // 此处也需要 Redux Store 中的 salt
},
}),
})
export const { useGetUserMutation } = authApi在上述代码中,无论是 query 函数的 body 还是 transformResponse 函数的 aesDEC 调用,都试图访问一个名为 salt 的变量,而这个变量预期来源于 Redux Store。由于 query 和 transformResponse 的作用域限制,它们无法直接获取到 Redux Store 的状态。
为了克服 query 和 transformResponse 的局限性,RTK-Query 提供了 queryFn 选项。queryFn 允许开发者完全自定义查询逻辑,并且其函数签名提供了访问 Redux Store 状态的 api 对象。
queryFn 的函数签名如下: async (arg, api, extraOptions, baseQuery) => { ... }
其中,api 对象是关键,它包含一个 getState 方法,通过 api.getState() 即可获取当前的 Redux Store 状态。
Picit AI
免费AI图片编辑器、滤镜与设计工具
172
查看详情
现在,我们将之前的示例代码使用 queryFn 进行改造,以实现在请求和响应处理中访问 Redux Store 中的 salt 值。
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({
queryFn: async (arg, api, extraOptions, baseQuery) => {
// 1. 通过 api.getState() 访问 Redux Store 状态
const state = api.getState();
// 假设 salt 存储在 userSlice 的某个位置,例如 state.user.salt
const salt = state.user.salt; // 请根据实际 Redux Store 结构调整路径
try {
// 2. 使用获取到的 salt 构建请求体,并调用 baseQuery 执行请求
const { data, error } = await baseQuery({
url: '/Account/Login/GetUserInfo',
method: 'POST',
body: {
RequestVerificationToken: salt
}
});
// 3. 处理 baseQuery 的响应
if (error) {
return { error }; // 如果有错误,直接返回错误
}
// 4. 使用获取到的 salt 解密响应数据
const decryptedData = aesDEC(data, salt);
return { data: decryptedData }; // 返回处理后的数据
} catch(error) {
// 5. 捕获并返回任何运行时错误
return { error };
}
},
}),
})
});
export const { useGetUserMutation } = authApi通过 queryFn 选项,RTK-Query 提供了一个强大而灵活的机制,允许开发者在端点内部访问 Redux Store 的状态。这对于需要动态构建请求、根据用户权限调整请求或在响应处理中利用 Store 数据的复杂场景至关重要。虽然 queryFn 引入了更多的手动控制,但它也赋予了我们处理高级数据交互逻辑的能力,是 RTK-Query 高级用法中不可或缺的一部分。正确地运用 queryFn,能够显著提升 RTK-Query 的应用范围和灵活性。
以上就是在 RTK-Query 端点中访问 Redux Store 状态的实用指南的详细内容,更多请关注其它相关文章!
# js
# react
# 这也
# 我们可以
# 所需
# 您的
# red
# 作用域
# ai
# 品牌线上营销推广方式
# 安徽seo优化排名
# 长治湖南网站优化推广
# 湖北seo哪家有实力
# 深圳俄语网站建设
# 新吴区视频营销推广公司
# 广西网站推广报价
# 郑州美食小吃网站建设
# seo优化指导
# 浙江网站优化哪家好
# 滤镜
# 输入框
# 与非
# 当您
# 表单
# 自定义
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
德邦快递收费标准详解
苹果手机怎么合并照片_苹果手机合并多张照片的操作方法
《幻兽帕鲁》手游帕鲁捕捉技巧分享
如何在CSS中使用伪类:valid实现表单验证提示_结合:valid改变边框颜色
附近酒吧怎么找?
c++如何实现一个简单的RPC框架_c++远程过程调用原理与实践
如何在CSS中使用absolute实现登录弹窗居中_transform translate结合
什么是Satis,如何用它搭建一个私有的composer仓库?
steam缓存文件在哪儿_steam缓存文件的路径查找方法与结构说明
b站如何管理订阅_b站订阅标签分类管理
ao3入口镜像地址 ao3镜像入口可靠跳转
byrutor直接访问入口 byrutor官方游戏库
Win11怎么开启HDR_Windows 11显示器画质增强设置
mysql触发器如何编写_mysql触发器编写规范与代码示例讲解
Mac hosts文件在哪里_Mac修改hosts文件详细教程
照片整理的黄金法则是怎样的? 理解“收集-筛选-归档-备份”四步流程
OTT月报 | 2025年9月智能电视大数据报告
4399小游戏下装链接 4399小游戏下载链接入口
Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合
晓晓优选app支付宝绑定方法
小米倒班助手添加日历提醒
BunnyStream TUS视频上传指南:解决401认证错误与参数配置
在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明
微信网页版在线登录 微信网页版在线使用入口
红手指专业版app注册教程
腾讯QQ邮箱官方入口 QQ邮箱网页版登录平台
支付宝登录刷脸不是本人如何解决
毒蘑菇VOLUMESHADER_BM官网首页登录入口 毒蘑菇VOLUMESHADER_BM官网首页登录入口说明
《友玩*》创建群聊方法
多闪APP官方下载安装入口_多闪最新版本获取入口
word文档行距怎么调?word文档调行距的操作步骤
快手极速版在线体验区 快手极速版网页体验入口
mysql镜像配置如何设置用户权限组_mysql镜像配置用户组与权限分级管理方法
iQOO手机信号差网络不稳定怎么办 信号问题原因排查与增强设置【攻略】
win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】
mail.qq.com登录入口 QQ邮箱网页版直达
在XML中嵌入二进制数据(如图片)的最佳实践是什么? Base64编码与解析注意事项
个人所得税办理入口 个人所得税综合所得年度汇算入口
海棠书屋官方在线书籍入口 海棠书屋文学作品浏览官网链接
PySimpleGUI中实现键盘按键与按钮事件绑定教程
猫眼app抢票快还是小程序快
Python中对象引用与链表属性赋值的机制解析
Three.js中动态更换3D模型纹理的教程
PSD转AI文件的简单方法
iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南
《健康大兴》注册方法介绍
iPhone14无法连接蓝牙设备如何解决
处理含命名空间的XML文件 Power Query中的高级技巧
视频号视频怎么提取文案?提取的文案如何优化与使用?
菜鸟驿站的取件码忘了怎么办 手机快速查询指南
2025-09-30
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。