【问题标题】:What are the advantages and disadvantages of mobx and Redux, particularly in a React-Native environment? [closed]mobx 和 Redux 的优缺点是什么,尤其是在 React-Native 环境中? [关闭]
【发布时间】:2017-09-04 23:50:36
【问题描述】:

最近我听到每个人都在谈论 mobx,我在生产 React Native 应用程序中使用(正在使用)Redux。

我只是想看看是否有人对这两种方法都有经验,并且可以建议每个人在哪些方面比另一个更有优势。

【问题讨论】:

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


    【解决方案1】:

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

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

    @saiki link 已经编写了一个包含大量示例的出色对比分析,它可以帮助您了解使用 MobX 与 Redux 编写的代码会是什么样子。

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

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

    State 是一个普通的 javascript 对象。您永远不会直接对其进行变异,而是通过纯函数在应用程序中发生某些事情(导致动作分派)时派生一个新的更新状态。

    更多细节你可以通过这个例子byExample

    【讨论】:

      【解决方案2】:

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

      • Redux 深受函数式编程原则的影响:

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

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

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

      【讨论】:

      • 这正是我所追求的。感谢您的好评!
      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2010-09-12
      • 1970-01-01
      • 2014-06-26
      • 2011-05-25
      相关资源
      最近更新 更多