React Native并非原生
英文原文:React.native isn't
當我們就 Apple 的“MVC 非 MVC”討論術語泛濫問題時,非死book 于上個月正式開源的 React Native 似乎亦是如此。主張“Learn once, write everywhere”,讓開發者用 JavaScript 開發移動原生應用,此景雖好,但事實并非如此。React Native 其中很大一部分利用了原生架構,卻也包含了一些非原生架構:
- 用視圖作為 drawing result,而不是 drawing source;
- 平行的組件層級結構(component hierarchy);
- 使用 ListView,而不是 UITableView;
- 不使用 UIButton 創建按鈕;
- 不使用響應鏈,但是找到了相似的替代品;
- 最后,使用 JavaScript 語言來編寫。 </ul>
以上列出的種種多多少少體現了 React Native 的一些優勢,但 React Native 本質上并非原生。另外,React 與不久前剛發布的 Components 框架的基本原理跟蘋果關于 MVC 模式的誤解實在是不謀而合:
圖中所示:控制器(Controller)持續通過視圖(View)顯示數據并不能體現 MVC 的具體含義,除非將其理解為“Massive View Controller”。
在 Components 和 React Native 中,用 View(UIView/NSView)將“實現 UI 的可變狀態”替換為“模型(單一)功能”,發揮 drawRect::的作用。以后面臨的問題不再是創建新的完整框架,而是通過視圖顯示數據。解決方法是,將畫板上的 Custom View 拖到 UI 上,執行 drawRect::。繪制視圖(以及/或者將組件設置為視圖狀態突變)比 drawRect::更凸顯狀態性,而非削弱。
再強調一下,這個解決方案還不錯,只是沒有循規蹈矩罷了。據我所知,目前熱捧 React Native 的主要是一些 Web 開發者,他們如今無需學習 Objective-C/Swift 或 Java,就能開發“原生”應用了。不過,React Native 究竟是否體驗與宣傳如一還尚未定論。
最后,“react”貌似是指“單向響應數據流”——更讓人摸不著頭腦的行內話,我想以后會常常遇到。