Redux

Redux是一个用于管理JavaScript应用状态的库,尤其适用于React项目。它通过集中式store解决组件间状态共享难题,通过action和reducer处理状态变化。Redux工作流程包括创建store、分发action、reducer处理action并更新store。对于异步请求,Redux使用中间件如redux-thunk或redux-saga进行处理,解耦异步逻辑。
摘要由CSDN通过智能技术生成

 1、对Redux的理解,主要解决什么问题?

🔰理解:

1️⃣:redux是一个专门用于做状态管理的JS库(不是react插件库)

2️⃣:它可以用在react,angular,vue等项目中,但基本与react配合使用。redux集中式管理react应用中多个组件共享的状态。Redux就是降低管理难度。

3️⃣:可以用redux的工作流程做出解释。

4️⃣:传统的状态管理方式是将状态放在组件内部,状态分部在各个组件中,使得状态难以追踪或者更新,Redux则是将状态统一放在单一的数据库中(既store)。

🔰主要解决的问题:

1️⃣:在React中,UI以组件的形式搭建,组件之间可以嵌套组合,但React中组件间通信的数据流是单向的,顶层组件可以通过props属性向下层组件传递数据,而下层组件不能向上层组件传递数据,兄弟组件之间同样不能。这样就可以使用redux,让其他组件可以随时共享到某个组件的状态。

2️⃣:一个组件需要改变另一个组件的状态(通信),这里可以采用view-model的原理解释。

2、Redux原理及其工作流程:

🔰Redux原理:

1️⃣:compose.js提供了从右到左的函数式编程,

compons函数式编程:compose是一个函数,该函数接收多个函数作为参数,并return一个新的函数。在将多个函数组合为一个函数时,compose函数会从右到左执行传进来的各个函数,也就是说最后一个传入的函数先会被执行,然后把结果传给前一个函数进行处理,直到第一个函数处理完成。

compose在redux中的应用主要体现在combineReducerapplyMiddleWare。 

✨:combineReducer函数使用compose函数将多个reducer函数组成一个根reducer函数,combineReducer接收一个对象,该对象的属性为各个子reducer函数,最终返回一个根reducer函数,

✨:applyMiddleWare函数使用compose函数来将多个中间件函数组合一起,最终返回一个加强版的store.dipatch方法。

2️⃣:createSore.js提供了作为生成唯一store的函数。

3️⃣:combineReducer.js提供了合并多个reducer的函数,保证store的唯一性

4️⃣:bindActionCreator.js可以让开发者不直接接触dipatch的前提下进行更改state的操作。

bindActionCreator是一个函数,接收两个参数(actionCreator,dipatch)

5️⃣:applyMiddleWare.js这个方法通过中间件来增强dipatch的功能 

🔰Redux工作流程:

工作流程图

 - const store = createStore(fn) 生成数据

- 使用Action Creators创建action

- 通过dipatch将action分发出去

- store对要使用的reducer进行绑定,然后将action分发到对应的reducer上

- 在reducer上进行相应的action操作并且返回结果给store

- 组件就可以通过store的getState()进行获取操作返回而对方结果

3、Redux中异步的请求怎么处理

Redux的异步请求我们会借助redux的异步中间件进行异步处理。当前主流的异步中间件有两种redux-thunk、redux-saga。

1️⃣:使用redux-thunk

优点:redux-thunk的实现方式简单,体积小

缺点:

- 样板代码过多,通常一个请求需要大量的代码,而且很多都是重复性质的。

- 耦合严重:异步操作与redux的action耦合在一起,不方便管理。

- 功能孱弱:有一些实际开发常用的功能需要自己分装。

import {legacy_createStore as creatStore,applyMiddleware} from 'redux';
import shopCartReducer from 'reducer文件'
import logger from 'redux-logger'
import thunk from 'redux-thunk'
const store = creatStore(shopCartReducer,applyMiddleware(thunk,logger))
export default store
6. 创建异步操作文件夹actionAsync.js
> redux-thunk的异步方法是异步回调函数
> 该回调函数说明如下:
> 第一个参数:dispatch对象
> 第二个参数:getState():获取仓库中的state的方法
```js
import getShopCarList from 'actionCreator地址'
`这里dipatch是原生的dipatch`
export const getShopCartListAsync= async(dispatch,getState)=>{
     const result =  await axios.get('路径地址').then()
     dipatch(getShopCarListCreator(result.data.data))
}

2️⃣:redux-saga:

优点:

- 异步解耦:异步操作被转移到单独saga.js中,不再是参杂在action.js或component.js中

- action摆脱thunk-function:dispatch的参数依然是一个纯粹的action

- 异常处理:受益于generator function的saga实现,代码异常/请求失败都可以直接通过try/catch语法直接捕获处理

- 功能强大:redux-saga提供了大量的saga辅助函数和Effect创建器供开发者使用,开发者无须封装或者简单封装即可使用。

- 灵活:redux-saga可以将多个saga可以串行/并行组合起来,形成一个非常使用的异步flow

- 易测试: 提供了各种case的测试方案,包括mock task,分支覆盖等等。

4、Redux如何实现属性传递,介绍下原理:

react-redux数据的传输:

view----> action---->reducer------->store------>view

点击事件的数据如何通过redux传到view上:

- 组件上的AddClick事件通过mapDispatchToProps把数据传到action

- action的Add传到reducer上

- reducer传到store上 const store = createStore(reducer)

- store再通过mapStateToProps映射传到组件的text上:State.text

5、Redux中间件是什么?接收几个参数?柯里化函数两端的参数具体是什么?

Redux的中间件提供的是位于action被发起之后,到达reducer之前的扩展点

原本的redux工作流程:

view-------(dipatch)---->action------->reducer------>store

使用中间件以后的工作流程:

view-------(dipatch)---->action---middleWare---->reducer------>store

再middleWare这一环节可以做一些副作用的操作,比如异步请求,打印日志等。

柯里化函数两端:

一个是middlewars,一个是store.dipatch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值