學(xué)習(xí)筆記:RN概述

一蜡豹、寫在前面:從零入門ReactNative的建議

  • 1、需要有html溉苛、js镜廉、css等前端編程語言
  • 2、然后愚战,先去理解React基本使用
  • 3娇唯、搭建ReactNative開發(fā)環(huán)境,選用iOS/Android先把項(xiàng)目運(yùn)行起來寂玲。
  • 4塔插、學(xué)習(xí)ReactNative基本開發(fā)流程。
  • 5敢茁、寫頁面必須先搞懂flex布局方式佑淀。
  • 6、學(xué)習(xí)ReactNative相關(guān)組件彰檬。
  • 7伸刃、深入學(xué)習(xí)ReactNative的原理等高級(jí)知識(shí)。
  • 8逢倍、閱讀源碼捧颅,真正的搞懂它。

二较雕、搭建環(huán)境

  • 依賴Node環(huán)境
    brew install node
    node -v 查看node版本
    sudo npm cache clean -f 清除緩存
    sudo n stable 升級(jí)到穩(wěn)定版本
    sudo npm install -g n 按照node

  • 安裝watchman
    brew install watchman
    是 facebook 的一個(gè)開源項(xiàng)目碉哑,它開源用來監(jiān)視文件并且記錄文件的改動(dòng)情況,當(dāng)文件變更它可以觸發(fā)一些操作,例如執(zhí)行一些命令等等亮蒋。

  • 創(chuàng)建項(xiàng)目
    npx react-native init xxx_name_xxx

  • 啟動(dòng)
    yarn ios 扣典。
    或者直接使用xcode啟動(dòng)工程編譯調(diào)試。

三慎玖、搞懂npx react-native init xxx_name_xxx創(chuàng)建的工程目錄

  • react-native 相關(guān)命令
    react-native init MyAppName --version 0.64.0
    react-native --version 查看版本
    npx react-native info 命令查看當(dāng)前的版本

核心幾個(gè)文件:

  • 工程入口代碼文件index.js
  • App組件定義App.js贮尖,當(dāng)然也可以新建文件定義組件。
  • App.json RN模塊的配置
{ "name": "HelloFirstRNDemo",
"displayName": "HelloFirstRNDemo"}

其中name配置字符串趁怔,必須和RCTRootView初始化initWithBridge:moduleName:initialProperties:用到的moduleName一樣湿硝。

  • iOS和Android兩個(gè)文件夾是原生相關(guān)的工程。
  • package.json 工程的配置文件润努,定義腳本命令关斜、包依賴、測(cè)試等相關(guān)
  • 相關(guān)依賴庫 node_modules
    DC34CDDB-9096-49D5-8532-F9B893EDC804.png

四铺浇、ReactNative開發(fā)基本流程

4.1痢畜、ReactNative代碼

  • 1、在App.js中,導(dǎo)入RN相關(guān)的組件
import React from 'react';
import {
  SafeAreaView,
  ScrollView,
  StatusBar,
  Text,
  useColorScheme,
  View,
} from 'react-native';
  • 2丁稀、在App.js中繁涂,自定義組件,即搭建頁面二驰。
class HelloWorld extends React.Component {
  render() {
    return (
      <SafeAreaView>
        <Text style={styles.title}> hello my world! </Text>
        <ScrollView>
          <Section> section 1</Section>
      </SafeAreaView>
    )
  }
}
  • 3、在App.js中秉沼,定義樣式桶雀,推薦統(tǒng)一定義樣式,RN使用布局方式為Flex布局唬复。
const styles = StyleSheet.create({
    title: {
        fontSize: 42,
    },
});
  • 4矗积、在index.js中,組件的注冊(cè)
import {AppRegistry} from 'react-native';
import {HelloWorld} from './App';
import {name as appName} from './app.json';

// 第一個(gè)參數(shù):應(yīng)用名稱敞咧,第二個(gè)參數(shù):組件名棘捣。
AppRegistry.registerComponent(appName, () => HelloWorld);

4.2、原生端(iOS為例)

  • 初始化RCTBridge休建,RN的核心類乍恐,負(fù)責(zé)原生和React的交互
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];

// 其中self為實(shí)現(xiàn)RCTBridgeDelegate的實(shí)例,必須實(shí)現(xiàn)方法如下:
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge {
      NSURL *url = nil;
    #if DEBUG
      url = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
    #else
      url = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
    #endif
      return url;
}
  • 初始化ReactNative代碼的加載容器類RCTRootView
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"FirstRNDemo"
                                            initialProperties:nil];

四测砂、調(diào)試

開發(fā)中茵烈,一般使用iOS的模擬器調(diào)試,簡(jiǎn)單便捷砌些。當(dāng)然集成的時(shí)候需要打包到真機(jī)上運(yùn)行看看呜投。相關(guān)參見ReactNative中文網(wǎng)相關(guān)教程。

其他

  • 關(guān)于Demo工程中的存璃,TypeScript的語法
    const App: () => React$Node = () => {...}
    實(shí)際等價(jià)于const App = () => {...}

其實(shí)際是TypeScript的語法仑荐,它類型定義:const hello : string = "Hello World!"

// 定義一個(gè)類型纵东,這個(gè)類型是一個(gè)返回ReactNode的函數(shù) `type TypeApp = () => ReactNode;也就是說() => React$Node` 是一種函數(shù)類型

// 聲明一個(gè) const 變量粘招,類型是 TypeApp,值是一個(gè)箭頭函數(shù)
const App: TypeApp = () => { ...};

學(xué)習(xí)實(shí)例

RNDemo


參考

Facebook-ReactNative
ReactNative中文網(wǎng)
React-Native 樣式指南
Flex 布局教程:語法篇
RN2--JavaScript篮迎、ES6男图、Node

React Native在美團(tuán)外賣客戶端的實(shí)踐
React Native 的未來與React Hooks
《React Native 精解與實(shí)戰(zhàn)》 讀書筆記

  • 書籍:
    《React Native 精解與實(shí)戰(zhàn)》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甜橱,隨后出現(xiàn)的幾起案子逊笆,更是在濱河造成了極大的恐慌,老刑警劉巖岂傲,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难裆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乃戈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門褂痰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人症虑,你說我怎么就攤上這事缩歪。” “怎么了谍憔?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵匪蝙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我习贫,道長(zhǎng)逛球,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任苫昌,我火速辦了婚禮颤绕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祟身。我一直安慰自己奥务,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布月而。 她就那樣靜靜地躺著汗洒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪父款。 梳的紋絲不亂的頭發(fā)上溢谤,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音憨攒,去河邊找鬼世杀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肝集,可吹牛的內(nèi)容都是我干的瞻坝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杏瞻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼所刀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捞挥,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤浮创,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后砌函,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斩披,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡溜族,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了垦沉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煌抒。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厕倍,靈堂內(nèi)的尸體忽然破棺而出寡壮,到底是詐尸還是另有隱情,我是刑警寧澤讹弯,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布诬像,位于F島的核電站,受9級(jí)特大地震影響闸婴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜芍躏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一邪乍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧对竣,春花似錦庇楞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至临燃,卻和暖如春睛驳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膜廊。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工乏沸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爪瓜。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纳鼎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子傀顾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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