clojure-china

2017-03-29T04:31:54.782001Z

re-frame vs reagent vs rum

2017-03-29T04:33:22.790961Z

### re-frame 是一个开发框架,而不是一个实现库。它的优点是: - 鼓励了单向的信息流动,即从 db -> subscription -> views -> event -> update db ,一种非常现代的实现思路 - 鼓励了清晰的代码组织方式 它的缺点也来自于这些优点: - 内置了唯一一个 app-db 的 atom,尽管这大多数情况下是一个好的决定,但各种函数造成了对这个全局状态的隐式依赖。在实践上让 components 无法将设计本地化。例如,一个 component 需要对上级组件的数据进行显示,也需要在全局上定义视图 (re-frame 强烈鼓励这么做),尽管可以短路这个设计,但会让 re-frame 的好处很大程度被削弱。 - 代码组织鼓励按照一套统一的规范,但对于自有规范的项目,则造成了过多的限制。 ### reagent 不使用 re-frame,直接使用 reagent 组件库,也是我们考虑的选项。它可以避免上述的问题,但: - 它使用的 ratom 是非常好的抽象。但其内置的 cursor (相当于 re-frame 的视图)则过度依赖于 atom 的实现,远远没有 re-frame 视图的灵活性。 ### rum rum 虽然使用者不如 re-frame/reagent 框架广泛,但它的设计思想给了我们最大的灵活性。 - 它不对后台的数据存储方式做假设,而是由各组件自由决定。每个组件可以通过 mix-in 来决定如何使用参数。如: - 我们将对经常改变的组件使用 reactive mix-in (类似于 reagent 的 ratom)来提高性能 - 对数据不多而且变化不那么频繁的组件则简单使用 static mix-in - 这些决定可以比较容易的切换