在Web app中,router負責處理url的改變,redirect頁面去各個page。在Mobile app的世界,這種功能更常稱為navigation。
I. Navigation發展史
百花齊放
以前的React Native community有很多各式各樣的navigation library:
React Native Core:
- NavigatorIOS:只有iOS能用。
- Navigator (Removed)
Community:
aksonov/react-native-router-flux
react-native-router
(Deprecated)wix/react-native-navigation
:提供真正ios/android原生的navigation。airbnb/native-navigation
(Still beta)expo/ex-navigation
(Deprecated):來自Expo team - 現在非常活躍的RN open source team,Expo一系列工具也是他們出品ericvicenti/navigation-rfc
(NavigationExperimental) (Deprecated)
React:
react-router
:就是React的官方router,提供binding讓RN apps也能使用。react-router-navigation
:react-router
的一個plugin
還有很多很多...
官方欽定的React Navigation
當然百花齊放的後果就是很多都未達到production-use的要求,很多時候各library都會有自己的limitation和bug。
最後在2016年,ex-navigation
和navigation-rfc
合併成為了react-navigation
然後Facebook也在官方文檔中推薦使用React Navigation,整個community都開始圍繞這個Library發展。
II. 現時推薦的Navigation Libraries
(React Native世界變化得太快,本篇下筆日期為2018-05-01,日後可能有所變動。)
react-navigation
- 官方/Expo推薦、完全JS-based
- React Navigation is just not good
wix/react-native-navigation
提供真正ios/android原生的navigation、官方文檔也有提及
aksonov/react-native-router-flux
(Now v4 based on React Navigation)
"Every new major version of RNRF is based on different navigation framework and mostly preserves own API."
III. 結論
React Native的libraries一直都變化得很快,可能不出一年半載又有新的navigation推出。但如果你是現在要投身開發RN app,我會推薦React Navigation,因為:
- 最多Github stars
- 官方推薦,只會越來越多人用
- 完全JS-based,所以Expo apps也可以用