本文已参与[新人创作礼]活动,一起开启掘金创作之路。
当我们进行企业级项目开发时,父组件与子孙后代组件 和 两个没有联系的组件之间状态进行传递比较复杂 他们之间要进行数据通信,平时使用的props传值就会变得难以维护,因此我们需要一个中间容器 ,去管理我们的在开发中的状态及逻辑,当需要使用这些状态时,再从中间容器里取出需要的状态
一:Redux:是JS 应用的状态容器,提供可预测的状态管理
Redux的工作流程:
Redux的使用方法:
1. 首先创建一个store,只能有一个store
2. 创建一个reducer纯函数,里面用来返回store中的值
3. 将action提取到actionCreators中,
并且将action操作提取成常量 ,放在actionTypes中
4.外部组件调用dispatch(action),reducer
将根据相应的action type
执行相应的操作,将最新的数据返回给state
5. store
中数据发生变化后,在组件中需要通过store.subscribe(this.storeChange)
去订阅store
中的数据变化,并且将其值set进组件的state中,这样组件中的数据就得到了更新
另:使用axio
获取接口与Redux
结合
1. 需要安装react-thunk
,然后进行中间件的配置
2. 添加一个异步action
3. 在组件的生命周期函数componentDidMount
中去获取初始化数据,store.dispatch()
里可以直接接受异步请求函数,也可
另:react-saga 也是进行异步请求数据的中间件,
1. 需要安装react-saga ,然后进行中间件的配置
2. 新建一个sagas.js文件
也可实现异步请求结合redux,更新state
二:React-redux:他是react的一个插件,用于简化redux在react 中的使用,原理和redux一样 ,只是使用方法有所不同
使用方法:
1. 安装react-redux,用provider将需要共享数据的组件包裹起来,就不需要在每个组件中去订阅store的变化,直接在组件中就可以使用
2. 创建store
3. 创建reducer
4. react-redux与redux在组件中调用方式不同,首先创建一个映射关系stateToProps ,将state的值转换为组件中的props的值,第二步创建提个组件的事件方法,去dispatch(action)更新state,最后使用connect将两个参数结合起来,同时把当前组件传入进去
当然 ,在现在hooks技术日益强大之时,我们开发时经常使用useContext+useReducer进行数据共享
需要源码的话:
github.com/susu1997/re… redux
github.com/susu1997/re… react-redux
本文是学习了技术胖老师课程的记录, 技术胖老师个人网站:jspang.com/
若文中有误,忘大佬指出