mobx和Redux有哪些优点和缺点,特别是在React-Native环境中?

时间:2017-04-10 03:40:50

标签: react-native react-redux immutable.js mobx-react

最近我听到大家都在谈论mobx,我已经在生产的React Native应用程序中使用过(使用)Redux。

我只是想看看是否有人对这两者都有经验,并且可以建议每个人比其他人更有优势。

2 个答案:

答案 0 :(得分:18)

我会粘贴他们的方法摘要I wrote in a Reddit comment

  • Redux深受功能编程原则的影响:

    • 它鼓励使用“纯粹”功能,希望您“不可变地”处理您的数据(即,复制和修改副本,不直接更新原始值),并专注于数据流的明确定义和更新逻辑。
    • 它为您提供了执行“时间旅行调试”的功能(在您所在州的各个更新之间来回切换,或者从客户崩溃报告中加载应用状态的副本以查看发生了什么)。
    • Idiomatic Redux代码“规范化”嵌套或关系对象,如数据库。每个项目都在一个地方定义,而您的数据的其他部分仅通过ID引用该项目,稍后会留下查找
    • 通常抱怨的是样板代码太多,而典型的Redux使用涉及字符串常量和switch语句等。
    • 当您想要通过应用程序明确跟踪数据流时,或想要确切了解应用程序在特定状态下结束的原因时使用它。
  • MobX受面向对象编程和反应式编程原则的影响:

    • 它允许您将特定的数据片段定义为“可观察”,然后将其包装起来并跟踪对该数据所做的任何更改,并自动更新观察数据的任何其他代码片段。
    • 它鼓励使用标准的变异代码,比如someObject.someField = someValue和someArray.push(someValue),真正的更新逻辑隐藏在MobX内部。
    • 惯用语MobX代码以嵌套的形式保存您的数据,并维护从一个对象到另一个对象的直接引用
    • 一个可能的抱怨是,您没有看到数据更新的时间和方式,并且可能更难以跟踪应用程序
    • 当您更喜欢OOP样式而不是Functional时,请使用它,更喜欢用类而不是普通函数来表示和操作数据,或者想要编写不太明确的更新逻辑并让库完成管理事务的工作。

对于更深入的比较,我强烈推荐来自ReactConf 2017的Preethi Kasireddy的演讲MobX vs Redux: Comparing the Opposing Paradigms和Robin Wieruch的文章Redux or MobX: An attempt to dissolve the confusion。我也有一个number of other comparisons collected in my React/Redux links list

答案 1 :(得分:7)

MobX和Redux尝试使用不同的方法解决类似的问题。主要目标是; javascript应用程序中的状态管理。

这里的核心问题是您的主要数据源和用户界面之间的信息的有效和最佳同步,通过您之间的任何层和传输机制。

@saiki link已经编写了一个很好的比较分析,内容丰富,可以帮助您了解使用MobX与Redux编写代码时的代码。

MobX采用了一种通常称为声明式MVVM的方法:

enter image description here

Redux包含函数式编程和引用透明性:

State是一个普通的javascript对象。你永远不会直接改变它,而是通过纯函数在应用程序中发生某些事情(导致动作调度)时导出一个新的更新状态。 enter image description here

有关详细信息,请参阅此示例byExample