Redux和React-redux的使用方法及差异

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

当我们进行企业级项目开发时,父组件与子孙后代组件 和 两个没有联系的组件之间状态进行传递比较复杂 他们之间要进行数据通信,平时使用的props传值就会变得难以维护,因此我们需要一个中间容器 ,去管理我们的在开发中的状态及逻辑,当需要使用这些状态时,再从中间容器里取出需要的状态

一:Redux:是JS 应用的状态容器,提供可预测的状态管理
Redux的工作流程:

image.png

Redux的使用方法:
1. 首先创建一个store,只能有一个store

image.png

2. 创建一个reducer纯函数,里面用来返回store中的值

image.png

3. 将action提取到actionCreators中,

image.png

并且将action操作提取成常量 ,放在actionTypes中

image.png

4.外部组件调用dispatch(action),reducer将根据相应的action type执行相应的操作,将最新的数据返回给state

image.png

5. store中数据发生变化后,在组件中需要通过store.subscribe(this.storeChange)去订阅store中的数据变化,并且将其值set进组件的state中,这样组件中的数据就得到了更新

image.png

另:使用axio获取接口与Redux结合
1. 需要安装react-thunk ,然后进行中间件的配置

image.png

2. 添加一个异步action

image.png

3. 在组件的生命周期函数componentDidMount中去获取初始化数据,store.dispatch()里可以直接接受异步请求函数,也可

image.png

另:react-saga 也是进行异步请求数据的中间件,
1. 需要安装react-saga ,然后进行中间件的配置

image.png

2. 新建一个sagas.js文件

image.png

image.png

image.png

也可实现异步请求结合redux,更新state

二:React-redux:他是react的一个插件,用于简化redux在react 中的使用,原理和redux一样 ,只是使用方法有所不同

使用方法:

1. 安装react-redux,用provider将需要共享数据的组件包裹起来,就不需要在每个组件中去订阅store的变化,直接在组件中就可以使用

image.png

2. 创建store

image.png

3. 创建reducer

image.png

4. react-redux与redux在组件中调用方式不同,首先创建一个映射关系stateToProps ,将state的值转换为组件中的props的值,第二步创建提个组件的事件方法,去dispatch(action)更新state,最后使用connect将两个参数结合起来,同时把当前组件传入进去

image.png

当然 ,在现在hooks技术日益强大之时,我们开发时经常使用useContext+useReducer进行数据共享

需要源码的话:

github.com/susu1997/re… redux

github.com/susu1997/re… react-redux

本文是学习了技术胖老师课程的记录, 技术胖老师个人网站:jspang.com/

若文中有误,忘大佬指出

猜你喜欢

转载自juejin.im/post/7079632416523943967