React Native Redux 使用指南 redux-toolkit

React Native Redux 使用指南 redux-toolkit

一个可预测和可维护的全局状态管理 JavaScript 库

ReduxReact-Redux以及**@reduxjs/toolkit 的关系:**

Redux、React-Redux、@reduxjs/toolkit 是 React 生态中状态管理的「黄金三角组合」,它们的关系可以用 「核心库 → 框架适配器 → 官方优化工具集」 来概括:

image-20250430082331603

  1. Redux(核心库)

独立于框架的状态管理容器,解决「跨组件状态共享」问题(如全局主题、用户登录态)

  1. React-Redux(框架适配器)

Redux 与 React 的官方桥梁,解决「组件与 Redux 通信」问题

  1. @reduxjs/toolkit(官方优化工具集)

Redux 的「现代化开发工具包」,解决「传统 Redux 样板代码冗余」的痛点

@reduxjs/toolkit 基本使用

1. 安装依赖

npm install @reduxjs/toolkit react-redux

2. 创建 Slice

import { createSlice } from "@reduxjs/toolkit";// 定义RootState类型
export interface RootState {counter: {value: number;};
}export const counterSlice = createSlice({name: "counter",initialState: {value: 0,},reducers: {increment: (state) => {state.value += 1;},decrement: (state) => {state.value -= 1;},incrementByAmount: (state, action) => {state.value += action.payload;},},
});// 导出选择器
export const selectCount = (state: RootState) => state.counter.value;export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;

3. 配置 Store

import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "./counter/counterSlice";export default configureStore({reducer: {counter: counterReducer,},
});

4. Provider 包裹应用

import { Provider } from "react-redux";
import store from "./src/store";export default function App() {return (<Provider store={store}><Son /></Provider>);
}

5. 组件中使用

import { View, Text, Button } from "react-native";
import store from "./src/store";
import { Provider } from "react-redux";
import { useSelector, useDispatch } from "react-redux";
import { increment, selectCount } from "./src/store/counter/counterSlice";export default function App() {return (<Provider store={store}><Son /></Provider>);
}
const Son = () => {const count = useSelector(selectCount);const dispatch = useDispatch();return (<View><Buttontitle="增加"onPress={() => {// 增加数量dispatch(increment());}}/><Text>Counter: {count}</Text></View>);
};

Redux Toolkit 总结

Redux Toolkit 核心概念
  1. createSlice: 简化创建 reducer 和 action 的函数,自动生成 action creators 和 action types
  2. configureStore: 简化 store 的配置,自动配置 Redux DevTools 和中间件
  3. Provider: React-Redux 提供的组件,使整个应用可以访问 Redux store
  4. useSelector: 从 Redux store 中提取数据的 Hook
  5. useDispatch: 获取 dispatch 函数的 Hook,用于派发 actions
数据流向

image-20250430082353455

  1. 用户交互触发 dispatch(action)
  2. Store 调用 reducer 处理 action
  3. Reducer 根据 action 返回新状态
  4. Store 通知所有订阅者(组件)
  5. 使用 useSelector 的组件重新渲染

Redux 持久化存储

Redux 持久化存储可以在应用重启后保留状态数据,通过redux-persist库实现

image-20250430082410361

1. 安装依赖

npm install  redux-persist @react-native-async-storage/async-storage

2. 配置持久化存储

在 store 配置文件中集成 redux-persist:

import { combineReducers, configureStore } from "@reduxjs/toolkit";
import counterReducer from "./counter/counterSlice";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { persistStore, persistReducer } from "redux-persist";// 持久化配置
const persistConfig = {key: "root", // 存储的键名storage: AsyncStorage, // 使用AsyncStorage作为存储引擎whitelist: ["counter"], // 仅持久化指定Reducer// blacklist: ['otherReducer'], // 可选:排除指定Reducer
};// 合并所有reducer
const rootReducer = combineReducers({counter: counterReducer,
});// 创建持久化的reducer
const persistedReducer = persistReducer(persistConfig, rootReducer);// 创建store
export const store = configureStore({reducer: persistedReducer,middleware: (getDefaultMiddleware) =>getDefaultMiddleware({ serializableCheck: false }),
});// 创建持久化存储实例
export const persistor = persistStore(store);

3. 在应用中集成 PersistGate

在应用根组件中包装 PersistGate,确保在数据加载完成前显示加载状态:

import { Provider } from "react-redux";
import { PersistGate } from "redux-persist/integration/react";
import { store, persistor } from "./src/store";export default function App() {return (<Provider store={store}><PersistGate persistor={persistor}>{/* 应用组件  你的组件 */}<YourAppComponent /></PersistGate></Provider>);
}

redux 持久化总结

持久化配置选项

redux-persist 提供多种配置选项:

  • key: 存储在 AsyncStorage 中的键名
  • storage: 存储引擎,React Native 中通常使用 AsyncStorage
  • whitelist: 需要持久化的 reducer 名称数组
  • blacklist: 不需要持久化的 reducer 名称数组
  • transforms: 在持久化前转换 state 的方法数组
  • stateReconciler: 如何合并初始和存储的状态
  • version: 状态版本控制

特别说明

  1. 使用configureStore时,需要禁用序列化检查:
middleware: getDefaultMiddleware =>getDefaultMiddleware({serializableCheck: false});
  1. PersistGate组件可以设置 loading 属性来自定义加载状态
  2. 可以使用persistor.purge()方法清除所有持久化数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81294.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM——Java 虚拟机是如何加载 Java 类的?

引入 在 Java 世界的底层运作中&#xff0c;类加载机制扮演着一个既神秘又关键的角色。它就像是一个精心设计的舞台幕后 machinery&#xff0c;确保了 Java 程序能够顺利运行。今天&#xff0c;我们就深入探索 Java 虚拟机&#xff08;JVM&#xff09;是如何加载 Java 类的。 …

清华团队提出时序聚类数据库内高效方案,已被SIGMOD 2025接收

时间序列聚类是挖掘物联网等场景下频繁模式的关键技术&#xff0c;但现有SOTA方法&#xff08;如K-Shape&#xff09;面临两大瓶颈&#xff1a;1&#xff09;传统数据库因LSM-Tree存储导致时间戳无序&#xff0c;难以直接支持高效聚类&#xff1b;2&#xff09;跨时间范围查询需…

【阿里云大模型高级工程师ACP学习笔记】2.8 部署模型

一、学习目标 特别说明:这一章节是2025年3月官方重点更新的部分,几乎对内容重新翻新改造了一遍,重点突出了对于如何结合不同的阿里云产品来部署大模型进行了更加详细的介绍和对比,这里整理给大家,方便大家参考。 在备考阿里云大模型高级工程师ACP认证的过程中,学习《2.8 …

第T10周:数据增强

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 从 tensorflow.keras 中导入 layers 模块&#xff0c;包含了常用的神经网络层&#xff0c;用来搭建模型结构。 检查并列出系统中可用的物理 GPU 设备&#xff…

uniapp 支付宝小程序自定义 navbar 无效解决方案

如图&#xff1a; uniapp编译到支付宝小程序隐藏默认的导航栏失效了 解决方案&#xff1a; 在 pages.json 文件中找到 globalStyle 中加入以下代码&#xff1a; "mp-alipay": {"transparentTitle": "always","titlePenetrate":…

vue2 el-element中el-select选中值,数据已经改变但选择框中不显示值,需要其他输入框输入值才显示这个选择框才会显示刚才选中的值

项目场景&#xff1a; <el-table-column label"税率" prop"TaxRate" width"180" align"center" show-overflow-tooltip><template slot-scope"{row, $index}"><el-form-item :prop"InquiryItemList. …

centos7 离线安装python3 保留python2

一、事前准备&#xff1a; &#xff08;1&#xff09;查看centos具体版本 cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core) &#xff08;2&#xff09;查看linux中当前python版本 centos7 默认安装python2.7.5 &#xff08;3&#xff09;查看python3的依赖&#…

十三种通信接口芯片——《器件手册--通信接口芯片》

目录 通信接口芯片 简述 基本功能 常见类型 应用场景 详尽阐述 1 RS485/RS422芯片 1. RS485和RS422标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6. 选型建议 2 RS232芯片 1. RS232标准 2. 芯片功能 3. 典型芯片及特点 4. 应用场景 5. 设计注意事项 6…

2025年RAG技术发展现状分析

2025年&#xff0c;大模型RAG&#xff08;检索增强生成&#xff09;技术经历了快速迭代与深度应用&#xff0c;逐渐从技术探索走向行业落地&#xff0c;同时也面临安全性和实用性的新挑战。以下是其发展现状的综合分析&#xff1a; 一、技术架构的持续演进 从单一到模块化架构 …

case和字符串操作

使用if选择结构 if [];then elif [];then #注意这个地方,java是else if else ; fi 使用for循环结构 使用for循环&#xff0c;语法结构如下所示&#xff1a; for 变量名 in 值1 值2 值3 #值的数量决定循环任务的次数 do命令序列 done#循环输出1到10 for i in {1..10} #注…

Stm32 烧录 Micropython

目录 前言 准备工作 开始操作 问题回顾 后记 前言 去年曾经尝试Pico制作openmv固件&#xff0c;由于知识储备不够最后失败了&#xff0c;留了一个大坑&#xff0c;有了前几天的基础&#xff0c;慢慢补齐知识&#xff0c;最近这一周一直在学习如何编译Stm固件并烧录到单片机…

盐化行业数字化转型规划详细方案(124页PPT)(文末有下载方式)

资料解读&#xff1a;《盐化行业数字化转型规划详细解决方案》 详细资料请看本解读文章的最后内容。 该文档聚焦盐化行业数字化转型&#xff0c;全面阐述了盐化企业信息化建设的规划方案&#xff0c;涵盖战略、架构、实施计划、风险及效益等多个方面&#xff0c;旨在通过数字化…

2025年人工智能火爆技术总结

2025年人工智能火爆技术总结&#xff1a; 生成式人工智能 生成式人工智能可生成高质量的图像、视频、音频和文本等多种内容。如昆仑万维的SkyReels-V2能生成无限时长电影&#xff0c;其基于扩散强迫框架&#xff0c;结合多模态大语言模型和强化学习等技术&#xff0c;在运动动…

边缘计算革命:大模型轻量化部署全栈实战指南

当ResNet-152模型能在树莓派4B上实现每秒27帧实时推理时&#xff0c;边缘智能时代真正到来。本文解析从模型压缩到硬件加速的完整技术栈&#xff0c;实测Transformer类模型在移动端的部署时延可压缩至16ms&#xff0c;揭示ARM芯片实现INT4量化的工程秘诀与十种典型场景优化方案…

边缘计算:数字世界的”末梢神经系统”解析-优雅草卓伊凡

边缘计算&#xff1a;数字世界的”末梢神经系统”解析-优雅草卓伊凡 一、边缘计算深度解析 1.1 边缘计算的定义与架构 边缘计算&#xff08;Edge Computing&#xff09;是一种分布式计算范式&#xff0c;它将数据处理能力从传统的集中式云数据中心推向网络边缘&#xff0c;更…

面试手撕——迭代法中序遍历二叉树

思路 访问顺序和处理顺序不一致导致迭代法难写&#xff0c;体现在总要先遍历根节点&#xff0c;才能访问左右孩子&#xff0c;用null标记&#xff0c;null标记的节点表示已经访问过了&#xff0c;下一次可以处理&#xff0c;所以在当前栈顶节点不是null的时候&#xff0c;都要…

AD系列:Windows Server 2025 安装AD CS角色和颁发证书

什么是 Active Directory 证书服务&#xff1f; Active Directory 证书服务 (AD CS) 是一个 Windows Server 角色&#xff0c;负责颁发和管理在安全通信和身份验证协议中使用的公钥基础结构 (PKI) 证书。 颁发和管理证书 数字证书可用于对电子文档和消息进行加密和数字签名&…

kubernetes》》k8s》》Service 、Ingress 区别

K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源&#xff0c;它提供了七层&#xff08;应用层&#xff09;的负载均衡功能。Ingress可以根据主机名、…

【java WEB】恢复补充说明

Server 出现javax.servlet.http.HttpServlet", according to the project’s Dynamic Web Module facet version (3.0), was not found on the Java Build Path. 右键项目 > Properties > Project Facets。Dynamic Web Module facet version选4.0即可 还需要在serv…

VMware 创建虚拟机+简易安装Ubuntu的详细操作步骤

VMware 创建虚拟机安装Ubuntu的详细操作步骤 一、创建虚拟机1.1 点击创建新的虚拟机1.2 选择自定义创建虚拟机1.3 选择虚拟机的硬件兼容性1.4 安装客户机操作系统1.5 简易安装信息1.6 命名虚拟机名称1.7 处理器配置1.8 虚拟机内核选择1.9 网络类型1.9 选择I/O 控制器类型1.10 选…