先說觀點,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 性能好 + 單向數據流應對復雜度,對其本質卻不知其所以然...)