學習就如同長跑,要想跑的遠,就不能跑得太快。javascript
這段時間瞭解了一些前端方面的知識,而且用 React Native 寫了一個簡易新聞客戶端 Demo。css
React Native 和原生開發各有所長,具體就不細說。混合使用能充分發揮各自長處,惟一的缺憾就是 React Native 和原生通訊過程相對不那麼友好。html
在這裏分享一下學習過程當中我的認爲比較重要的知識點和學習資料,本文儘可能寫得輕一些,但願對讀者可以有所幫助。前端
有些前端經驗的小夥伴學起 React Native 就像老馬識途,東西都差很少,變來變去也玩不出什麼花樣。html5
HTML5:H5 元素對比 React Native 組件,使用方式一模一樣。java
CSS:React Native 的 FlexBox 用來爲組件佈局的,和 CSS 親兄弟關係。react
JavaScript:用 JavaScript 寫,能不瞭解一下嗎? JavaScript 之於 React Native 就如同磚瓦之於摩天大樓。ios
React JSX:React 使用 JSX 來替代常規的 JavaScript。JSX 是一個看起來很像 XML 的 JavaScript 語法擴展。git
React Native 社區相對比較成熟,中文站的內容也比較全面,從入門到進階,環境安裝到使用指南,學習 React Native 推薦從官網 reactnative.cn 開始。FlexBox 佈局、組件、API 建議在該官網查看,注意網頁頂部能夠切換 React Native 的歷史版本。github
App Transport Security Settings
,容許 http 請求)class Clock extends React.Component {
// 構造函數 一般進行一些初始化操做 如定義 state 初始值
constructor(props) {
super(props);
}
// 組件已掛載
componentDidMount() {}
// 組件即將被卸載
componentWillUnmount() {}
// 渲染函數
render() {
return (
<View></View>
);
}
}
複製代碼
一個組件全部的數據來自於 Props 與 State ,分佈是外部傳入的屬性和內部狀態。
Props 是父組件給子組件傳遞數據用的,Props 由外部傳入後沒法改變,能夠同時傳遞多個屬性。
// 父組件 傳遞一個屬性 name 給子組件
<Greeting name='xietao3' />
// 子組件使用父組件傳遞下來的屬性 name
<Text>Hello {this.props.name}!</Text>
複製代碼
State :用來控制組件內部狀態,每次修改都會從新渲染組件。
// 初始化 state
constructor(props) {
super(props);
this.state = { showText: 'hello xietao3' };
}
// 使用 state
render() {
// 根據當前showText的值決定顯示內容
return (
<Text>{this.state.showText}</Text>
);
}
// 修改state,觸發 render 函數,從新渲染頁面
this.setState({showText: 'hello world'});
複製代碼
舉個栗子(若是理解了就跳過吧):
咱們使用兩種數據來控制一個組件:props 和 state。 props 是在父組件中指定,並且一經指定,在被指定的組件的生命週期中則再也不改變。 對於須要改變的數據,咱們須要使用 state 。
通常來講,你須要在 constructor
中初始化 state ,而後在須要修改時調用setState方法。
假如咱們須要製做一段不停閃爍的文字。文字內容自己在組件建立時就已經指定好了,因此文字內容應該是一個 prop 。而文字的顯示或隱藏的狀態(快速的顯隱切換就產生了閃爍的效果)則是隨着時間變化的,所以這一狀態應該寫到 state 中。
說到組件就不得不說 React Native 的組件化思想,尼古拉斯 · 趙四 曾經說過,組合因爲繼承。簡單來講就是多級封裝嵌套、組合使用,提升基礎組件複用率。
組件怎麼用?
授人以魚不如授人以漁,點擊這裏打開官方文檔 ,在左邊導航欄中找到你想使用的組件而且點擊,裏面就有組件的使用方式和屬性的詳細介紹。
關於 API
建議寫第一個 Demo 以前把全部 API 瀏覽一遍,磨刀不誤砍柴工,不必定要會用,但必定要知道這些提供了哪些功能,後面開發中可能會用得上。API 列表一樣能夠在官網左邊導航欄中找到。
如下內容不建議在第一個 Demo 中使用:
Redux(中文教程、英文教程) 是 JavaScript 狀態容器,提供可預測化的狀態管理。
部分推薦教程:
React Native 熱更新的發動機,接入的時候繞了不少圈圈,後面發現接入還挺方便的。CodePush 除了可使用微軟提供的服務進行熱更新以外,還能夠自建服務器進行熱更新。
推薦教程:
填坑:
3.2 在 React Native 中發消息通知給原生端(因爲RN調用原生端是異步的,最好在回調中經過通知把消息傳遞到具體的類)
3.3 在原生端發消息通知給 React Native (建議在Manager中寫一個類方法,這樣外部也能夠靈活發送通知)
這裏實際上是有 Demo 的,可是還沒整理好🤦️。
有時候一會兒看到好多感興趣的東西,容易分散注意力,在未到達必定水平以前建議不要想太多,入門看官網就足夠了。當你掌握了那些知識以後,你就能夠拓展一下你的知識庫了。
MonkeyNews,純 React Native 新聞客戶端,部分參考知乎日報,而且使用了其部分接口 因爲是練手項目,僅供參考,這裏附上 GitHub 地址,感興趣的能夠了解(star)一下。
Common
MKSwiper.js
MKNewsListItem.js
MKImage.js
MKPlaceholderView.js
MKThemeListItem.js
MKLoadingView.js
...
Config
MKConstants.js
Pages
Home
MKHomePage.js
MKNewsDetailPage.jsCategory
MKCategoryPage.js
MKThemeDetailPage.jsUserCenter
MKUserCenterPage.js
Services
MKServices.js
APIConstants.js
Styles
commonStyles.js
在對 React Native 有了一些瞭解以後,我的感受目前 React Native 的情況很難替代原生開發,至少現階段還不行。
我的認爲的缺點:React Native 的雙端運行的優勢並不明顯,不少原生 API 使用起來都比較麻煩,很大程度上抵消了雙端運行帶來的開發效率提高,這種狀況下我甚至更願意用原生 iOS 和 Android 各寫一套。
優勢:React Native 和原生組合使用,經過動態路由動態在原生頁面和 React Native 頁面之間切換,能夠在原生頁面出現 bug 的時候切換至 React Native 頁面,或者比較簡單的頁面直接使用 React Native 開發都是很是不錯的。
總之, React Native 也是能夠大有做爲的。