React Native Redux 使用指南 redux-toolkit

打印 上一主题 下一主题

主题 1759|帖子 1759|积分 5277

React Native Redux 使用指南 redux-toolkit

一个可预测和可维护的全局状态管理 JavaScript 库
ReduxReact-Redux以及**@reduxjs/toolkit 的关系:**
Redux、React-Redux、@reduxjs/toolkit 是 React 生态中状态管理的「黄金三角组合」,它们的关系可以用 「焦点库 → 框架适配器 → 官方优化工具集」 来概括:


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

  • React-Redux(框架适配器)
Redux 与 React 的官方桥梁,解决「组件与 Redux 通信」问题

  • @reduxjs/toolkit(官方优化工具集)
Redux 的「现代化开发工具包」,解决「传统 Redux 样板代码冗余」的痛点
@reduxjs/toolkit 根本使用

1. 安装依赖

  1. npm install @reduxjs/toolkit react-redux
复制代码
2. 创建 Slice

  1. import { createSlice } from "@reduxjs/toolkit";
  2. // 定义RootState类型
  3. export interface RootState {
  4.   counter: {
  5.     value: number;
  6.   };
  7. }
  8. export const counterSlice = createSlice({
  9.   name: "counter",
  10.   initialState: {
  11.     value: 0,
  12.   },
  13.   reducers: {
  14.     increment: (state) => {
  15.       state.value += 1;
  16.     },
  17.     decrement: (state) => {
  18.       state.value -= 1;
  19.     },
  20.     incrementByAmount: (state, action) => {
  21.       state.value += action.payload;
  22.     },
  23.   },
  24. });
  25. // 导出选择器
  26. export const selectCount = (state: RootState) => state.counter.value;
  27. export const { increment, decrement, incrementByAmount } = counterSlice.actions;
  28. export default counterSlice.reducer;
复制代码
3. 设置 Store

  1. import { configureStore } from "@reduxjs/toolkit";
  2. import counterReducer from "./counter/counterSlice";
  3. export default configureStore({
  4.   reducer: {
  5.     counter: counterReducer,
  6.   },
  7. });
复制代码
4. Provider 包裹应用

  1. import { Provider } from "react-redux";
  2. import store from "./src/store";
  3. export default function App() {
  4.   return (
  5.     <Provider store={store}>
  6.       <Son />
  7.     </Provider>
  8.   );
  9. }
复制代码
5. 组件中使用

  1. import { View, Text, Button } from "react-native";
  2. import store from "./src/store";
  3. import { Provider } from "react-redux";
  4. import { useSelector, useDispatch } from "react-redux";
  5. import { increment, selectCount } from "./src/store/counter/counterSlice";
  6. export default function App() {
  7.   return (
  8.     <Provider store={store}>
  9.       <Son />
  10.     </Provider>
  11.   );
  12. }
  13. const Son = () => {
  14.   const count = useSelector(selectCount);
  15.   const dispatch = useDispatch();
  16.   return (
  17.     <View>
  18.       <Button
  19.         title="增加"
  20.         onPress={() => {
  21.           // 增加数量
  22.           dispatch(increment());
  23.         }}
  24.       />
  25.       <Text>Counter: {count}</Text>
  26.     </View>
  27.   );
  28. };
复制代码
Redux Toolkit 总结

Redux Toolkit 焦点概念


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



  • 用户交互触发 dispatch(action)
  • Store 调用 reducer 处理 action
  • Reducer 根据 action 返回新状态
  • Store 通知所有订阅者(组件)
  • 使用 useSelector 的组件重新渲染
Redux 持久化存储

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

1. 安装依赖

  1. npm install  redux-persist @react-native-async-storage/async-storage
复制代码
2. 设置持久化存储

在 store 设置文件中集成 redux-persist:
  1. import { combineReducers, configureStore } from "@reduxjs/toolkit";
  2. import counterReducer from "./counter/counterSlice";
  3. import AsyncStorage from "@react-native-async-storage/async-storage";
  4. import { persistStore, persistReducer } from "redux-persist";
  5. // 持久化配置
  6. const persistConfig = {
  7.   key: "root", // 存储的键名
  8.   storage: AsyncStorage, // 使用AsyncStorage作为存储引擎
  9.   whitelist: ["counter"], // 仅持久化指定Reducer
  10.   // blacklist: ['otherReducer'], // 可选:排除指定Reducer
  11. };
  12. // 合并所有reducer
  13. const rootReducer = combineReducers({
  14.   counter: counterReducer,
  15. });
  16. // 创建持久化的reducer
  17. const persistedReducer = persistReducer(persistConfig, rootReducer);
  18. // 创建store
  19. export const store = configureStore({
  20.   reducer: persistedReducer,
  21.   middleware: (getDefaultMiddleware) =>
  22.     getDefaultMiddleware({ serializableCheck: false }),
  23. });
  24. // 创建持久化存储实例
  25. export const persistor = persistStore(store);
复制代码
3. 在应用中集成 PersistGate

在应用根组件中包装 PersistGate,确保在数据加载完成前显示加载状态:
  1. import { Provider } from "react-redux";
  2. import { PersistGate } from "redux-persist/integration/react";
  3. import { store, persistor } from "./src/store";
  4. export default function App() {
  5.   return (
  6.     <Provider store={store}>
  7.       <PersistGate persistor={persistor}>
  8.         {/* 应用组件  你的组件 */}
  9.         <YourAppComponent />
  10.       </PersistGate>
  11.     </Provider>
  12.   );
  13. }
复制代码
redux 持久化总结

持久化设置选项

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


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


  • 使用configureStore时,需要禁用序列化查抄:
  1. middleware: getDefaultMiddleware =>
  2.    getDefaultMiddleware({serializableCheck: false});
复制代码

  • PersistGate组件可以设置 loading 属性来自定义加载状态
  • 可以使用persistor.purge()方法清除所有持久化数据

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

卖不甜枣

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表