React Native 入門筆記

接觸React Native有一段時間了,鑒于國內資料的缺乏,入門的時候相當痛苦,踩了不少坑,以下的筆記希望可以幫助和我一樣有投入RN熱情的同伴少走一些彎路,如有紕漏,歡迎大家交流指正

(除了百度、Google這兩位無名老師之外,感謝RN中文網東方耀老師的視頻


當前的編程環境:MacOS 10.11.4,Xcode 7.3.1,Android Studio 2.0,Sublime Text 2(插件配置以下有),RN的版本 0.26

個人推薦用Mac環境,環境配置簡單(具體請看RN中文網的配置,有些命令可能會出現權限問題,在命令前面加上sudo),可以做android和ios開發(需要提前安裝Xcode)

學習路線(配置完環境):html、css、js入門知識 ?---> React JS的入門及生命周期學習(掌握JSX語法) ---> RN組件學習(從View開始) ---> RN的彈性盒布局和API方法學習


環境部分

1.sublime安裝插件

(1)使用View > Show Console的方式打開命令行,然后用網絡找到的代碼安裝Package Control(具體方法百度),安裝之后重啟生效

(2)使用Sublime Text 2 > Preference > Package Control,選擇install Package,安裝以下插件:

Emmet(有自己的語法,快速寫CSS和HTML,文件名要html和css才可以生效)

HTML-CSS-JS Prettify ? ?格式化代碼

Spacegray ? ?主題,使整體更好看https://github.com/kkga/spacegray,安裝之后Sublime Text 2 > Preference > Settings-User,在里面引用相關的主題(可能要在之前的代碼后面加逗號),引用之后立刻生效,具體git上也有詳細說明


2.真機調試

相同的部分:USB連接手機,使電腦和手機在同個局域網(連同個wifi或者開電腦熱點)

ios:

(1)在命令行中找到項目文件夾,即ls命令可以看到index.ios.js的目錄,輸入react-native run-ios,啟動js服務器,看到 React packager ready. 并且沒有報錯實施下一步

(2)在項目文件夾中打開 ios -> [項目名稱].xcodeproj,找到AppDelegate.m中的jsCodeLocation變量,將里面localhost改為相對應的電腦 ip,然后運行真機,搖晃一下點擊Reload JS

android:

(1)配置好ANDROID_HOME環境(具體請百度),輸入adb devices可以看到連接的設備

(2)在命令行中找到項目文件夾,即ls命令可以看到index.android.js的目錄,輸入react-native run-android,啟動js服務器,看到 React packager ready. 并且沒有服務器啟動報錯實施下一步

(3)這時如果命令行有** BUILD FAILED **,看這一行上面的報錯,有可能是相對應的SDK版本或者ADT的版本不存在(比如默認的ADT 23.0.1版本沒下載到電腦),可以打開Android的SDK Manager安裝缺失的東西,然后再按照上一個步驟(若沒生效,可以重啟命令行試試)

(4)這時如果命令行有** BUILD SUCCEEDED **,搖晃手機或者點menu鍵可以出現一個菜單,點擊Dev Settings -> Debug server host & port for device,輸入電腦ip,確定,然后后退到主界面,搖晃手機或者點menu鍵,選擇Reload JS

注:可以在手機的瀏覽器中輸入 ?http://[電腦ip]:8081/index.ios.bundle?platform=ios&dev=true,觀察服務器的命令行是否有請求消息輸出,來判斷手機是否可以訪問到電腦的服務器


3.驗證JS服務器是否成功開啟

在命令行react-native run-ios(或者run-android)之后,有服務器的命令行彈出,這時在電腦瀏覽器中運行http://[電腦ip]:8081/index.ios.bundle?platform=ios&dev=true,命令行會有請求數據輸出,如 ?[14:16:46] request:/index.ios.bundle?plarform=ios&dev=true ? ? ? ?[14:16:46] request:/index.ios.bundle?plarform=ios&dev=true (19ms)


編程部分

1.React 生命周期

(1)初始化可以調用的函數:(組件還未渲染)

getDefaultProps????獲取實例的默認屬性,只調用一次,實例之間共享引用

getInitialState(在RN中constructor(props) 取代)初始化狀態,初始化各個實例特有的狀態

componentWillMount??組件即將被裝載,render之前最后一次修改狀態的機會

render??渲染虛擬的DOM節點,只能訪問 this.props 和 this.state ,只有一個頂層組件,不允許修改狀態和DOM輸出

componentDidMount??組件真正被裝載,成功render并渲染完成真實DOM之后觸發,可以修改DOM

(2)運行中可以調用的函數:

componentWillReceiveProps 組件在接收到屬性前觸發,父組件修改屬性觸發,可以修改新屬性、修改狀態

shouldComponentUpdate??當組件接收到新屬性和狀態的時候觸發,返回false會阻止render調用(小心使用)

componentWillUpdate??將要更新,不能修改屬性和狀態

render??同上

componentDidUpdate??會在組件更新完調用,可以修改DOM

(3)銷毀階段可以調用的函數:

componentWillUnmount??在組件真正銷毀之前調用


2.自定義組件要大寫

如var HelloWorld = Recct.createClass();

class Summary extends Component{}


3.RN所支持的最低iOS和Android版本

Android >= 4.1 (API 16)

iOS >= 7.0


4.style優先級

<View style={[styles.base, ?styles.background]}>.............. </View>

一個View可以接受多個style,如果有多個值,要用中括號 [] 括起來,最右邊的元素優先級最高,最右邊的style會覆蓋之前相同屬性的屬性值


5.屏幕寬高

(1)設置高度或寬度時不用帶單位,默認使用pt

(2)不能用百分比設置寬度高度

(3)可通過Dimensions模塊來獲取窗口寬高(可通過手動計算獲取寬高)

var Dimensions = require(‘Dimensions’);(ES6寫法改成import Dimensions from 'Dimensions';)

var {

width,

height

} = Dimensions.get(‘window’)


6.可通過PixelRatio模塊來獲取像素密度

var pixelRation = PixelRatio.get();

屏幕可以顯示的最小像素:1/pixelRation,可以用來設置border的寬度


7.render方法的注意點

(1)render() {return ();} ? return的最外層有且只有一個View,否則會報錯

(2)第一次初始化之后調用。界面呈現后,每次調用this.setState({[屬性]:[屬性值]})方法,系統都會重新調用render方法渲染視圖


8.文本換行: {'\n'}

如<Text>Hello {'\n'} World</Text>,中間會換行


9.外部文件引入寫法

ES5寫法:

(1)被引用的組件:要在文件底部有module.exports = [組件名稱];(刪掉入口函數

AppRegistry.registerComponent)。如module.exports = Header;

(2)引用的文件:const?[組件名稱] = require('./[文件名稱不帶后綴]’);,如const Header = require('./header');

ES6寫法(最新):

(1)被引用的組件:在組件前面加上export default(刪掉入口函數AppRegistry.registerComponent)。如export default class LoginUI extends Component

(2)引用的文件:import [組件] from ‘組件的路徑’; ?。如import LoginUI from './LoginUI.js';


10.引用第三方模塊相關命令:(在項目根目錄,即package.json文件所在的目錄)

npm的命令:

安裝模塊:npm i [模塊名稱] —save,如 ? ?npm i react-native-swiper —save

查看模塊:npm view [模塊名稱],如 ? ?npm view react-native-swiper

刪除模塊:npm rm?[模塊名稱] —save,如 ? ?npm rm react-native-swiper —save

查看幫助命令:nam help [命令],如 ? ?nam help i


11.TouchableHighlight、TouchableNativeFeedback、TouchableWithoutFeedback注意點

(1)均可通過onPress方法響應觸碰事件,如果還沒學會使用箭頭函數,就要加上相關函數后面bind(this),否則this.setState會出現找不到對象的情況。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 如 onPress={this.clickTarget.bind(this)}

(2)包裹內容的最外層有且只有1個對象,如果里面有多個對象,最外層用一個VIew包裹起來

(3)Text自帶onPress方法,如果不需要交互效果,如按鈕的點擊變色,可以直接用Text實現點擊事件,如

<Text onPress={this.clickTarget.bind(this)}>click me</Text>



暫時先到這里,如有紕漏,歡迎大家交流指正

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容