1. 首页
  2. 编程面试题
  3. 前端
  4. React

在Redux中如何进行异步操作?



一般项目中,我们可以直接在 `componentDidMount` 中进⾏异步操作,比如发送网络请求,⽆须借助 Redux。但如果我们的项目上了一定的规模,这种方法再管理异步流的时候就比较困难。这个时候,我们会借助 Redux 的异步中间件来进⾏异步处理。

Redux 其实有多种异步中间件,但当下主流的只有两种:`redux-thunk` 和 `redux-saga`。

**redux-thunk**

优点:

- 体积⼩:redux-thunk 的实现⽅式很简单,只有不到20⾏代码
- 使⽤简单:redux-thunk 没有引⼊像 redux-saga 或者 redux-observable 额外的编程范式,上⼿非常简单

缺点:

- 样板代码过多:与 redux 本身⼀样,通常发送⼀个请求就需要编写⼤量代码,⽽且很多都是重复性的
- 耦合严重:异步操作与 redux 的 action 偶合在⼀起,不⽅便管理
- 功能薄弱:实际开发中常⽤的⼀些功能都需要⾃⼰封装

**redux-saga**

优点:

- 异步解耦:异步操作被被转移到了单独的 saga.js 中,不再是掺杂在 action.js 或 component.js 中
- action 摆脱了 thunk function:dispatch 的参数依然是⼀个纯粹的 action (FSA),⽽不是充满了 “⿊魔法” 的 thunk function
- 异常处理:受益于 Generator Function 的 saga 实现,代码异常/请求失败都可直接通过 try/catch 捕获处理
- 功能强⼤:redux-saga 提供了⼤量的 Saga 辅助函数和 Effect 创建器,开发者⽆须自行封装、或只要简单封装即可使⽤
- 灵活:redux-saga 可将多个 Saga 进行串⾏或并⾏组合,形成⼀个⾮常实⽤的异步流程
- 易测试:提供了各种测试⽅案,包括 mock task、分⽀覆盖等

缺点:

- 额外的学习成本:redux-saga 不仅使⽤了难以理解的 Generator Function,⽽且存在数⼗个 API,学习成本远超 redux-thunk;最重要的是,这些额外的学习成本只能用于使用这个库的(而对于 redux-observable 来说,它虽也有学习成本,但它基于 rxjs ,这套编程思想和技术体系可以沿用到其他地方去)
- 体积庞⼤:代码近 2000 ⾏(压缩后大约 25KB)
- 功能过剩:其中提供的并发控制等功能,实际开发中很难会⽤到,但我们依然要引⼊这些代码
- 对 TS ⽀持不友好:yield ⽆法返回 TS 类型

**redux-observable**

优点:

- 功能最强:由于基于 rxjs 这个强⼤的响应式编程库,借助 rxjs 的操作符⼏乎可以做任何你能想到的异步处理
- 知识沿用:如果你已学习过 rxjs,那么 redux-observable 的学习成本并不⾼;⽽且,随着 rxjs 的升级,redux-observable 也会变得更强⼤

缺点:

- 学习成本奇⾼:对于还不会 rxjs 的开发者来说,需要额外的学习两个都较为复杂的库
- 社区⼀般:redux-observable 下载量只有 redux-saga 的 1/5,社区不够活跃,而 redux-saga 仍处于领导地位

发布者:admin,如若转载,请注明出处:https://ai1024.vip/39238.html

QR code
//