当前位置: 首页 > news >正文

Redux Toolkit(RTK)在React tsx中的使用

一个需求:

header组建中有一个搜索框,然后这个搜索框在其他页面路由上都可以使用:例如这两个图共用顶部的搜索框;

我之前的做法就是组建传值, 在他们header 组建和 PageA ,B 的父级组件上定一个值,然后顶部变化传到父级组件,在从父级组件传到page组件,有点繁琐,现在说一下利用redux解决这个问题:

其实就是在同一个窗口内的组件共享一个store值, store的至一旦发生变化,就通知到监听这个值变化的组件中去:

首先准备连个组件,然后用一个组件套住它们两个如下

Header.tsx文件:

Home.tsx(table页面所在)

看清代码中的参数函数

然后我们准备一个store文件:

里面定义了search: searchValue,一个search值, 

这个search值呢,来自谁呢,来自

import searchValue from '../features/search/searchSlice'这个文件会处理这个值

我们再看searchSlic组件

这个代码片段是使用 Redux Toolkit 中的 createSlice 函数创建的 Redux slice。在 Redux 中,一个 slice 是包含 reducer 和 action creators 的一组逻辑块,它用于管理 store 中的一部分状态.

(我知道之前用redux是 action和reducer 和store),要搞很多代码,现在我使用的是 Redux Toolkit,当然官方现在也是主推这种写法, 

所以整个流程就是:

使用 configureStore 函数来创建 Redux store,在创建 store 时,可以通过 reducer 属性将一个或多个 reducers 组合到一个根 reducer 中,这样就能够管理整个应用程序的状态。

我在store放了一个search的属性;

然后用 createSlice 创建的了一个创建一个searchReducer,因为createSlice 函数返回的对象中包含了 reducer 属性,可以通过 searchSlice.reducer 获取到该 reducer。将这个 reducer 添加到 configureStorereducer 中,就将该 reducer 集成到了整个 Redux store。

然后我们看到searchSlice文件中其实也包含了actions,

// Action creators are generated for each case reducer function
export const { handleSearchValue } = searchSlice.actions

可以通过 searchSlice.actions 获取到该 slice 的 action creators。这些 action creators 可以在应用程序的不同部分被分发,从而触发对应的 actions。

这样,通过分发 handleSearchValue action,就可以更新 Redux store 中与搜索值相关的状态。

最后在 React 组件(Home组件)中,你可以使用 useSelector 钩子从 Redux store 中选择特定的状态。通过在组件中使用 useSelector,你可以订阅 Redux store 中的状态变化,并在状态变化时触发组件的重新渲染。

这就是通过这个简单的方式现实开头提到的需求

Redux演示

相关文章:

  • UDP群聊
  • Java网络编程,对使用UDP实现TCP(一)三次握手实现的补充
  • 华为OD机试 - 数据单元的变化替换(Java JS Python C)
  • 在idea中使用maven创建dynamic web project
  • 4-Docker命令之docker export
  • Redis KEY*模糊查询导致速度慢、阻塞其他 Redis 操作
  • 破晓6G新时代:迈向新一代星地融合的高速测试解决方案
  • Mysql的多表联合查询
  • OpenAI 承认 ChatGPT 最近确实变懒,承诺修复问题
  • 基于Maven构建OSGI应用(Maven和OSGI结合)
  • 为什么现在是学习 Rust 的最佳时机
  • js根据数组对象中的某个值去重
  • Android audio设置投屏和喇叭双输出
  • 【数据结构和算法】--队列
  • Kubernetes(k8s)集群部署----->超详细
  • JS 中的深拷贝与浅拷贝
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • CSS 专业技巧
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Flannel解读
  • Flex布局到底解决了什么问题
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript弹出层-初探
  • Python 反序列化安全问题(二)
  • 不上全站https的网站你们就等着被恶心死吧
  • 从PHP迁移至Golang - 基础篇
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端路由实现-history
  • 让你的分享飞起来——极光推出社会化分享组件
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何设计一个比特币钱包服务
  • 微信小程序设置上一页数据
  • 微信小程序实战练习(仿五洲到家微信版)
  • 正则表达式小结
  • 字符串匹配基础上
  • 说说我为什么看好Spring Cloud Alibaba
  • !!java web学习笔记(一到五)
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (九)c52学习之旅-定时器
  • (三)uboot源码分析
  • (十六)串口UART
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)scrum常见工具列表
  • *** 2003
  • .NET gRPC 和RESTful简单对比
  • .NET下ASPX编程的几个小问题
  • .Net转前端开发-启航篇,如何定制博客园主题