先说观点,React/Vue 和 Cycle 一起用是不太合理的,因为 Cycle 本身定位是框架,定义了整个应用的代码组织方式和开发范式,那就是无论是用户事件处理还是服务端数据同步,统统用 Rx 来做,Cycle 自己也提供了偏好的 view layer(基于 virtual-dom 的 DOM driver)。总的来说 Cycle 的范式侵入性很强,属于要么不用要用就得全盘接受 Rx for everything 的理念。我本身对于这个理念持保留态度,同时目前还没有看到过大型 Cycle 应用的例子,那么自然对于 Cycle 到底好不好用,也是持保留态度。
另一方面,在 React/Vue 应用中部分使用 Rx 是完全没有问题的。思路上来说就是把 React/Vue 组件的 local state 当做一个『中介』,在一个 Rx Observable 的 subscribe 回调里面更新组件状态。通过简单的绑定库支持,可以完全把 component state 作为一个实现细节封装掉,实现 Observable -> view 的声明式绑定。参考:
- Vue + Rx: https://github.com/vuejs/vue-rx/
- React + Rx: GitHub - belfz/fully-reactive-react-example
我个人倾向于在适合 Rx 的地方用 Rx,但是不强求 Rx for everything。比较合适的例子就是比如多个服务端实时消息流,通过 Rx 进行高阶处理,最后到 view 层就是很清晰的一个 Observable,但是 view 层本身处理用户事件依然可以沿用现有的范式。
---
题外话,
的答案拿 Vue 说事,然后说不可避免会遇到『性能墙』问题,而 Virtual DOM 是 React 对『性能墙』的解决方案,我只能说这个看法基本属于对 Virtual DOM 理解停留在宣传层面的水平。详见
网上都说操作真实 DOM 慢,但测试结果却比 React 更快,为什么? - 尤雨溪的回答。
而关于『复杂度墙』,则要么是对『单向数据流』的理解停留在宣传层面,要么是对 Vue 的了解有限(不了解您可以少说两句)。React 如果没有 Flux,其实也是依赖 component local state。React + Redux 做的事情说到底就是把应用状态从组件本身隔离出去统一管理,这种思路
并不是只有 React 能做到,只要有个声明式的视图层就行了。这也是为什么 Redux 是 view-layer agnostic,Vue,Angular 2 都有配合 Redux 使用的例子,Vue 自己也有专属的状态管理方案 Vuex。(这些话我其实在知乎重复过好几遍了,只是太多人被 FB 的宣传洗了脑,说 React 必提 virtual dom 性能好 + 单向数据流应对复杂度,对其本质却不知其所以然...)