【发布时间】:2015-01-31 14:08:12
【问题描述】:
作为一名拥有良好实践 AngularJS 经验的开发人员,我如何调整我使用 React 在 Flux 中编写 Web 应用程序的心智模型?
我不是在寻找 Flux+React 与 Angular 的答案(网上已经有很多),但我想想知道在两种“心态”:之前,我被介绍到The Angular Way;比较而言,React Way 是什么?
当我离开 Angular 世界并过渡到 Flux 时,我需要开始关注的关键事项有哪些?
首先是不同,现在是相似:AngularJS 非常固执己见,并且有一些非常大的禁忌,比如 - 不要将 UI/DOM 代码放在控制器中。 React 的最大禁忌和观点是什么?
最后但同样重要的是,Facebook 将 Flux 称为 MVC 的替代品,但正如我所看到的那样 - React 是视图引擎,商店是专注于单个域的模型容器,并且调度程序和动作形成一个控制器。那么这实际上是不是换了一个名字的 MVC 呢?
【问题讨论】:
-
我没有使用 Angular 的经验,因此很难解释两者之间的差异和过渡过程。但是关于问题的第二部分:React 只是来自 MVC 的 V,我会将它与 Mustache / Marionette 进行比较。 Flux 有 store 和 dispatcher,它们与 React 一起创建了 MVCish 结构。你也可以很容易地用 Backbone 替换 Flux。
-
在我看来,Flux 是一种反模式。将所有商店耦合到单个调度员,无论其抽象级别和责任如何,都会导致庞大的调度程序块与管理的噩梦。
-
@DmitriZaitsev Flux 没有强制要求每页只有一个调度程序。您可以在同一页面上拥有尽可能多的调度程序来处理不同类型的操作。
-
@bluecollarcoder that 不是反模式吗?考虑通过单个调度程序汇集所有操作的调试好处?
-
为什么这是一个反模式?与 1 个相比,拥有 2 个或 3 个调度程序真的会导致更多的调试开销吗?根据我的经验,通常最好将组件隔离到尽可能小的空间,尤其是事件总线。拥有一个大型的全局事件总线意味着您的操作/事件会传播到各处,从而增加发生冲突和意外行为的可能性。另外,请参阅 @DmitriZaitsev 对大型调度程序块的评论。
标签: javascript angularjs architecture reactjs reactjs-flux