redux和mobx对比

1.为什么要使用redux或者mobx?

在这里插入图片描述

2.为什么不使用react自身提供的context?

1.写法繁琐
2.组件之间的依赖关系变得复杂,但是React为我们提供的这个api还是可以看到它自身还是想弥补其状态管理的短板的

第三方状态管理库就是为了解决以上痛点

3.redux和mobx区别?

1.Redux的编程范式是函数式的而Mox是面向对象的;

2.因此数据上来说Redux理想的是immutable( immutable对象是不可直接赋值的对象,它可以有效的避免错误赋值的问题),每次都返回一个新的数据,而Mobx从始至终都是一份引用。因此Redux是支持数据回溯的;

3.然而和Redux相比,使用mobx的组件可以做到精准更新,这一点得益于Mobx的observable;对应的Redux是用dispath进行广播,通过Provider和connect来比对前后差别控制更新粒度;Mobx更加精细,MobX背后的哲学很简单:任何源自应用状态的东西都应该自动地获得
在这里插入图片描述
redux的数据流向

触发action,匹配到对应的reducer, 修改store中的数据,store中的数据发生改变,触发render方法,重新渲染页面UI
在这里插入图片描述
mobx的数据流向

触发action,在action中修改state,通过computed拿到state的计算值,自动触发对应的reactions,这里包含autorun,渲染视图等。有一点需要注意:相对于react来说,mobx没有一个全局的状态树,状态分散在各个独立的store中。mobx的工作原理非常简单,使用Object.defineProperty来拦截对数据的访问,一旦值发生变化,将会调用react的render方法来实现重新渲染视图的功能或者触发autorun等。Mobx的核心原理是通过action触发state的变化,进而触发state的衍生对象(computed value & Reactions)
在这里插入图片描述
redux全局存在一个store进行状态管理(集中式管理)
mobx存在多个store进行状态管理(每个组件都可以定义成单独的store)
在这里插入图片描述
mobx相对于redux来说,代码会简洁很多,因为不用写工程化模版,
相较于redux中使用middleware来处理异步,mobx中不需要那么复杂,只需要使用async/await来优雅的处理异步的逻辑
在这里插入图片描述

mobx中推荐使用单例模式来管理各种数据流,就像上面的Apple类 ,封装了可观察值的属性以及对应的操作逻辑,然后new一个实例并导出
在react中使用mobx,可以不需要操作state或props,直接赋值给类的属性即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

结论

  1. Redux要解决的问题是统一数据流,数据流完全可控并可追踪。要实现该目标,便需要进行相关的约束
  2. Redux由此引出dispatch action reducer等概念,对state的概念进行强约束,然而对于一些项目来说,太过强,便失去了灵活性。Mobx便是填补此空缺的
  3. redux将数据保存在单一的store中,mobx将数据保存在分散的多个store中
  4. redux使用plain object保存数据,需要手动处理变化后的操作;mobx使用observable保存数据,数据变化后自动处理响应的操作
  5. redux使用不可变状态,这意味着状态是只读的,不能直接去修改它,而是应该返回一个新的状态,同时使用纯函数;mobx中的状态是可变的,可以直接对其进行修改
  6. mobx相对来说比较简单,在其中有很多的抽象,mobx更多的使用面向对象的编程思维;redux会比较复杂,因为其中的函数式编程思想掌握起来不是那么容易,同时需要借助一系列的中间件来处理异步和副作用
  7. mobx中有更多的抽象和封装,调试会比较困难,同时结果也难以预测;而redux提供能够进行时间回溯的开发工具,同时其纯函数以及更少的抽象,让调试变得更加的容易
  8. 使用mobx的react 感觉很像vue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值