本文主要是介绍React学习笔记(三)——redux状态管理工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. Redux快速上手
1.1 什么是Redux?
- 通过集中管理的方式管理应用的状态
1.2 Redux快速体验
不和任何框架绑定,不使用任何构建工具,使用纯Redux实现计数器
模版:
- 也就是说 action 对象就是 { type: 'INCREMENT' }
1.3 Redux管理数据流程梳理
- state - 一个对象 存放着我们管理的数据状态
- action - 一个对象 用来描述你想怎么改数据
- reducer - 一个函数 根据 action 的描述生成一个新的 state
1.4 Redux 原理
① action
- 动作对象
- 包括两个属性:
- type:标识属性,值为字符串,唯一,必要属性
- data:数据属性,值类型任意,可选属性
- 例子: { 'type' : 'add', data: 1 }
② reducer
- 用于初识化状态、加工状态
- 加工时,根据就的 state 和 action,产生新的 state 的纯函数
③ store
- 将state、action、reducer 联系在一起的对象
- 如何得到此对象
- import { createStore } from ‘redux’
- import reducer from './reducers'
-
const store = createStore(reducer)
-
此对象的功能
-
getState() :得到 state
-
dispatch(action):分发 action,触发 reducer 调用,产生新的 state
-
subscribe(listener):注册监听,当产生了新的 state 时,自动调用
-
2. Redux与React - 环境准备
2.1 配套工具
- 简化 store 的配置方式
- 内置 immer 支持可变式状态修改
- 内置 thunk 更好的异步创建
② react-redux - 用来 链接 Redux 和 React组件 的中间件
2.2 配置基础环境
- npx create-react-app react-redux
- npm i @reduxjs/toolkit react-redux
- npm run start
2.3 store目录结构设计
- 通常集中状态管理的部分都会单独创建一个单独的 `store` 目录
- 应用通常会有很多个子 store 模块,所以创建一个 `modules` 目录,在内部编写业务分类的子store(子仓库)
- store中的入口文件 index.js 的作用是组合modules中所有的子模块,并导出 store(总仓库)
3. Redux与React - 实现counter
3.1 整体路径熟悉
3.2 使用React Toolkit 创建 counterStore
① counterStore.js 子仓库
- counterStore.js 子仓库的创建
- 导出子仓库中修改数据的 reducer(根据 action 的描述生成一个新的 state)和 action (type 用来描述如何修改数据)
② store/index.js 总仓库
- 安装总仓库(configureStore)
- 创建总仓库
- 导入子仓库的 reducer (根据 action 的描述,生成新的 state)
- 在总仓库的 reducer 中组合 子仓库的 reducer
- 导出总仓库
3.3 为React注入store
- index.js 项目如口文件
3.4 React组件使用store中的数据
- 通过 state.counter 拿到 counter 子模块
3.5 React组件修改store中的数据
3.6 总结
- 组件中使用哪个hook函数获取store中的数据?
- useSelector
- 组件中使用哪个hook函数获取dispatch方法?
- useDispatch
- 如何得到要提交action对象?
- 执行store模块中导出的actionCreater方法
4. Redux与React - 提交action传参
4.1 需求说明
4.2 提交action传参实现需求
5. Redux与React - 异步状态操作
5.1 需求理解
5.2 异步操作样板代码
- 封装异步请求获取数据
- 调用同步actionCreater传入异步数据生成一个action对象,并使用dispatch提交
③ 组件中dispatch的写法保持不变
这篇关于React学习笔记(三)——redux状态管理工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!