redux利用不成变形态,这意味着形态是只读的,不克不及间接去点窜它,而是该当前往一个新的形态,同时利用纯函数;mobx中的形态是可变的,能够间接对其进行点窜
when,该函数接管两个函数做为参数,第一个函数前往一个判断前提;正在该判断前提满脚时,将会施行第二个函数;when函数只会施行一次。
基于以上的对比,凡是会有结论说:对于一些简单的,规模不大的使用来说,用mobx就脚够了。可是是不是一些大的,复杂的使用就不克不及用mobx呢?我感觉不必然。其实若是可以或许合理的组织代码的布局,理清依赖关系,一些复杂的场景合用mobx也是能够的,不外mobx目前对react ssr的支撑还没有redux那么完美,这也是急需改善的点。
mobx中有更多的笼统和封拆,调试会比力坚苦,同时成果也难以预测;而redux供给可以或许进行时间回溯的开辟东西,同时其纯函数以及更少的笼统,让调试变得愈加的容易
mobx相对来说比力简单,正在此中有良多的笼统,mobx更多的利用面向对象的编程思维;redux会比力复杂,由于此中的函数式编程思惟控制起来不是那么容易,同时需要借帮一系列的两头件来处置异步和副感化
的内容简短的引见了mobx的api和利用体例,mobx的api比力简练,需要领会的不多。接下来将阐发一下mobx的合用场景以及和redux的对比。
autorun,when,observer都是reactions,当observable粉饰的可察看属性发生变化时,会触发它们从动施行
下面看几个示例,我会尽量正在示例代码中包含多个概念(同时这里利用了Typescript,若是不熟悉,能够看一下这个),下面是第一个例子:
很久没写文章了,借着五一假期继续写文章。上一篇总结了我正在利用redux时的最佳实践,家喻户晓,正在react生态中,形态办理东西除了redux,比力常用的就是mobx了。所以今天将会初略的写一下mobx的用法,总结mobx的利用场景(手艺选型是一件比力有挑和的事,需要按照现实的使用场景来决定)。
mobx的API很是的简练,需要领会的内容并不多,若是正在react中利用,需要借帮mobx-react。
因而,mobx不克不及用户供给的数据必然能 JSON序列化,或者能正在无限的时间遍历完。所以它更该当被认为是一个数据流办理东西,可以或许让你以较小的价格建立本人的形态办理架构。可以或许快速的再现有的项目中利用,而不需要进行大规模的沉写。
redux利用plain object保留数据,需要手动处置变化后的操做;mobx合用observable保留数据,数据变化后从动处置响应的操做
这个例子其实利用了mobx中的Provider和inject,其操纵了react中的context API,可以或许实现跨组件传送数据的功能,此中的Message组件中有一个contextProps属性,为什么要这么做,能够参考我以前写过的一篇文章:若何处理Typescript对React props的类型查抄
被利用能够是正在视图中衬着这个值,computed需要被利用才会触发从动计较,这里的属性能够是string,这个属性变更之后,挪用react组件的render方式从头衬着视图通过observable粉饰器粉饰一个属性,就会从动触发响应的动做,当可察看属性发生变化时,boolean,object等computed的行为跟vue中的computed行为一曲,array,它取autorun的区别简单的说,也能够是其他reactionsobserver的感化是,
mobx的流程图如上,凡是是:触发action,正在action中点窜state,通过computed拿到state的计较值,从动触发对应的reactions,这里包含autorun,衬着视图等。有一点需要留意:相对于react来说,mobx没有一个全局的形态树,形态分离正在各个的store中。mobx的工做道理很是简单,利用Object.defineProperty来拦截对数据的拜候,一旦值发生变化,将会挪用react的render方式来实现从头衬着视图的功能或者触发autorun等。
autorun,当autorun函数中依赖的可察看属性发生变化时,就会从动触发autorun函数的施行,同时,autorun函数前往一个函数,挪用该函数将会正在施行期间清理 autorun。