React Native學(xué)習(xí)筆記

1. props和state比較

1.1 props是在父組件中指定的令杈,一經(jīng)指定,那么在被指定的組件的生命周期中是不再改變的,一般是組件在創(chuàng)建的時(shí)候叹坦,使用props去做定制。

1.2 對(duì)于需要改變的數(shù)據(jù)卑雁,可以使用state募书,ES6中在constructor中初始化state(早期ES5的例子中會(huì)使用getInitialState做初始化),然后在修改的地方調(diào)用setState即可测蹲。

2.ReactNative component生命周期:
component生命周期

3. ReactNative 使用flex做實(shí)現(xiàn)彈性寬高

在組件樣式中使用flex可以使其在可利用的空間中動(dòng)態(tài)地?cái)U(kuò)張或收縮莹捡。一般而言我們會(huì)使用flex:1來(lái)指定某個(gè)組件擴(kuò)張以撐滿(mǎn)所有剩余的空間。如果有多個(gè)并列的子組件使用了flex:1扣甲,則這些子組件會(huì)平分父容器中剩余的空間篮赢。如果這些并列的子組件的flex值不一樣,則誰(shuí)的值更大文捶,誰(shuí)占據(jù)剩余空間的比例就更大(即占據(jù)剩余空間的比等于并列組件間flex值的比)荷逞。

注意:組件能夠撐滿(mǎn)剩余空間的前提是其父容器的尺寸不為零。如果父容器既沒(méi)有固定的widthheight粹排,也沒(méi)有設(shè)定flex种远,則父容器的尺寸為零。其子組件如果使用了flex顽耳,也是無(wú)法顯示的坠敷。

4.ReactNative 使用flexBox指定組件的布局

4.1一般來(lái)說(shuō)使用flexDriection(定義布局排列方向,默認(rèn)為縱向排列column)射富、justifyContent(定義主軸的排列方式:flex-start膝迎、center、flex-end胰耗、space-around以及space-between)和alignItem(定義與主軸垂直的次軸排列方式:flex-start限次、center、flex-end以及stretch)即可完成基本布局柴灯,更多布局字段見(jiàn)布局樣式屬性

5.ReactNative中使用到的列表控件

5.1常用的列表控件FlatList卖漫,FlatList組件必須的兩個(gè)屬性是datarenderItemdata是列表的數(shù)據(jù)源赠群,而renderItem則從數(shù)據(jù)源中逐個(gè)解析數(shù)據(jù)羊始,然后返回一個(gè)設(shè)定好格式的組件來(lái)渲染。FlatList相對(duì)于ListView的優(yōu)點(diǎn)就是會(huì)優(yōu)先渲染屏幕上可見(jiàn)的元素查描,而不是一次性渲染全部元素突委。

5.2對(duì)于需要做分組的列表控件柏卤,可以使用SectionList,那么相對(duì)于FlatList匀油,SectionListdata就會(huì)更加復(fù)雜了缘缚,同時(shí)還多了一個(gè)屬性renderSection用于渲染區(qū)的頭部試圖。

6.Native項(xiàng)目中集成RN頁(yè)面(使用cocoapods集成)

6.1新建一個(gè)native+reactnative的文件夾(以Native+ReactNativeDemoRoot為例)钧唐,在該文件夾中建子文件夾/ios忙灼,再把native工程拷貝到ios文件夾中。

6.2Native+ReactNativeDemoRoot中創(chuàng)建package.json文件(也可以使用npm init創(chuàng)建钝侠,但是內(nèi)容需要一步一步輸入该园,而且key值可能會(huì)忘記,有模板的話(huà)直接創(chuàng)建最方便了帅韧,package.json中的key值可以使用npm help json去查詢(xún))里初,注意package.json中的react-native的版本號(hào),這個(gè)會(huì)影響n(yōu)ative工程中podfile需要引入的文件忽舟。

"dependencies": {
    "react": "16.0.0-alpha.6",
    "react-native": "0.44.3"
  }

6.3在根目錄(即包含有package.json文件的目錄)中執(zhí)行命令npm install來(lái)安裝React和React Native模塊双妨,這些模塊會(huì)被安裝到根目錄下的node_modules/目錄中(所有通過(guò)npm install命令安裝的模塊都會(huì)放在這個(gè)目錄中。這個(gè)目錄我們?cè)瓌t上不復(fù)制叮阅、不移動(dòng)刁品、不修改、不上傳浩姥,隨用隨裝)挑随。

6.4進(jìn)入到native工程中,執(zhí)行命令pod init初始化Podfile文件勒叠,可以拷貝ReactNative中文網(wǎng)/集成到現(xiàn)有原生應(yīng)用中的Podfile模板兜挨,Podfile文件完成后使用命令pod install安裝React Native的pod包。

# target的名字一般與你的項(xiàng)目名字相同
target 'NumberTileGame' do

  # 'node_modules'目錄一般位于根目錄中
  # 但是如果你的結(jié)構(gòu)不同眯分,那你就要根據(jù)實(shí)際路徑修改下面的`:path`
  pod 'React', :path => '../node_modules/react-native', :subspecs => [
    'Core',
    'CxxBridge', # 如果RN版本 >= 0.45則加入此行
    'DevSupport', # 如果RN版本 >= 0.43拌汇,則需要加入此行才能開(kāi)啟開(kāi)發(fā)者菜單
    'RCTText',
    'RCTNetwork',
    'RCTWebSocket', # 這個(gè)模塊是用于調(diào)試功能的
    # 在這里繼續(xù)添加你所需要的RN模塊
  ]
  # 如果你的RN版本 >= 0.42.0,則加入下面這行
  pod "yoga", :path => "../node_modules/react-native/ReactCommon/yoga"

   # 如果RN版本 >= 0.45則加入下面三個(gè)第三方編譯依賴(lài)
  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

end

注意:
1.需要根據(jù)項(xiàng)目路徑修改path
2.需要根據(jù)package.json中的react-native版本對(duì)引入的文件做修改

6.5接下來(lái)就開(kāi)始寫(xiě)JS的代碼了弊决,在根目錄中創(chuàng)建index.js文件(注意在0.49版本之前是index.ios.js文件)噪舀,在文件中添加ReactNative的代碼,ReactNative中使用到的模塊都需要在Native的Podfile中對(duì)相應(yīng)的引入哦飘诗!

index.js是React Native應(yīng)用在iOS上的入口文件傅联。而且它是不可或缺的!它可以是個(gè)很簡(jiǎn)單的文件疚察,簡(jiǎn)單到可以只包含一行require/import導(dǎo)入語(yǔ)句。本教程中為了簡(jiǎn)單示范仇奶,把全部的代碼都寫(xiě)到了index.js里(當(dāng)然實(shí)際開(kāi)發(fā)中我們并不推薦這樣做)貌嫡。注意index.js中函數(shù)registerComponent注冊(cè)的模塊比驻,在Native工程中會(huì)用到

6.6在Native項(xiàng)目中添加一個(gè)事件處理,跳轉(zhuǎn)到ReactNative頁(yè)面岛抄,這里會(huì)使用到一個(gè)類(lèi)RCTRootView别惦,debug時(shí)使用下面的代碼加載ReactNative的界面,release時(shí)URL需要改變夫椭,具體后續(xù)補(bǔ)充掸掸。。蹭秋。

    NSURL *reactNativeLocation = [NSURL URLWithString:@"http://localhost:8081/index.bundle?platform=ios"];

    //moduleName就是在index.js中使用registerComponent注冊(cè)的模塊
    //initialProperties用于把native界面的數(shù)據(jù)傳輸給ReactNative界面扰付,ReactNative界面使用this.props即可獲取
    //launchOptions有待補(bǔ)充
    RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:reactNativeLocation
                                                        moduleName:@"ReactNativePage"
                                                 initialProperties:nil
                                                     launchOptions:nil];
    UIViewController *rootViewController = [[UIViewController alloc] init];
    rootViewController.view = rootView;
    [self.navigationController pushViewController:rootViewController animated:YES];

6.7在根目錄中執(zhí)行命令npm start啟動(dòng)開(kāi)發(fā)服務(wù)器(即Packager,它負(fù)責(zé)實(shí)時(shí)監(jiān)測(cè)js文件的變動(dòng)并實(shí)時(shí)打包仁讨,輸出給客戶(hù)端運(yùn)行)羽莺,最后編譯運(yùn)行Native項(xiàng)目即可。

Packager只是在開(kāi)發(fā)時(shí)需要洞豁,便于你快速開(kāi)發(fā)迭代盐固。在正式發(fā)布應(yīng)用時(shí),所有的js文件都會(huì)被打包為一整個(gè)jsbundle文件離線(xiàn)運(yùn)行丈挟,此時(shí)客戶(hù)端不再需要Packager服務(wù)刁卜。

7.動(dòng)畫(huà)-Animate

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市曙咽,隨后出現(xiàn)的幾起案子蛔趴,更是在濱河造成了極大的恐慌,老刑警劉巖桐绒,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夺脾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡茉继,警方通過(guò)查閱死者的電腦和手機(jī)咧叭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烁竭,“玉大人菲茬,你說(shuō)我怎么就攤上這事∨伤海” “怎么了婉弹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)终吼。 經(jīng)常有香客問(wèn)我镀赌,道長(zhǎng),這世上最難降的妖魔是什么际跪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任商佛,我火速辦了婚禮喉钢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘良姆。我一直安慰自己肠虽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布玛追。 她就那樣靜靜地躺著税课,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痊剖。 梳的紋絲不亂的頭發(fā)上韩玩,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音邢笙,去河邊找鬼啸如。 笑死,一個(gè)胖子當(dāng)著我的面吹牛氮惯,可吹牛的內(nèi)容都是我干的叮雳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼妇汗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帘不!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起杨箭,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寞焙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后互婿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體捣郊,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年慈参,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呛牲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡驮配,死狀恐怖娘扩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壮锻,我是刑警寧澤琐旁,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站猜绣,受9級(jí)特大地震影響灰殴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掰邢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一验懊、第九天 我趴在偏房一處隱蔽的房頂上張望擅羞。 院中可真熱鬧,春花似錦义图、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奏夫,卻和暖如春怕篷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酗昼。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工廊谓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人麻削。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓蒸痹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呛哟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子叠荠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容