react redux 中逻辑代码为什么一定要放到action中

学习redux也有段时间了,最近看了些别人的demo,突然有点懵。
为什么请求数据这个逻辑处理已定要放到action中呢?可能是因为MVC的设计模式,但是,前端本身由于异步的存在,M和V就是千丝万缕的关系。。。而且本身redux不适合处理异步逻辑,这样抽出来,各种中间件去处理,增加的复杂度真的比带来的好处要多么??

redux本身就是为了各个组件之间通信,没有关联的组件也可能拿到state。。。那就把它当成外在的大家都能够得着的数据库不就可以了,为什么一定要复杂化各种逻辑一定要拿出来组织呢?

然后最近学习saga,感觉更是郁闷了,本来没有那么麻烦的东西,一定要搞得这么复杂吗?

突然就懵了。。。不知道要不要搞得这么复杂化。就拿redux来做前端公共的数据不挺好么

阅读 4.8k
3 个回答

Redux的作用主要有两个:
1.看做一个数据库存放应用的全部状态,这一点你已经提到
2.管理这些状态,让View层的组件只关注View逻辑,方便view层的组件化和复用

所以与UI无关的数据逻辑,应该交给Redux负责,具体的实现方式有两种,胖action瘦reducer,和瘦action胖reducer。第一种方式,逻辑尽量放到action中,争取让reducer在接收到action后,可以直接使用action中的数据。第二种方式,action只是简单表明有个状态要修改,传递的状态数据也是未经任何处理的数据,reducer接收到这个数据后自行处理,然后更新状态。但对于你提到的异步逻辑,因为reducer必须是一个纯函数,所以异步逻辑只能放到action中处理。

只把Redux当数据库用来存放数据可以吧?可以,这样的话,你的逻辑都写到了view组件层,组件需要关心如何获取数据,如何处理数据,这样的组件层是不容易复用的,Redux的使用也是残缺的。甚至这种情况,你不用Redux,直接定义一个全局的state变量,所有组件都来直接操作它好了。

Redux体现的是代码分层、职责分离的编程思想,如果项目简单,是没有必要使用的,因为分层必然会增加项目结构的复杂度。

写错了吧,reducer里才是。reducer是根据action来处理state的。redux就像一个全局变量,你把所有需要共享的数据,根据一定的命名规则跟维护规则,放进去维护。
不知道你是怎么整理redux,我觉得redux+saga写出来的代码,简直无可挑剔的完美,代码逻辑一目了然。

在我的项目中,我是把流程完完全全交给saga来处理,在saga里拦截action,然后,saga分发put action去触发reducer,让reducer去处理state。

clipboard.png

clipboard.png

我用react不到半年,很多基础理论都没咋看完...

可能是一种约定,也称作按约定编程,是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题