React-Native從介紹到入門

React-Native入門

一呀舔、介紹

種類 實現(xiàn)技術 編程語言 公司
Cordova JavaScript 使用HTML,CSS和JavaScript Adobe
React-Native JavaScript React FaceBook
Flutter 原生編碼/渲染 Dart Google
Weex JavaScript Vue Alibaba

二弥虐、React-Natve環(huán)境搭建

  • 安裝watchman

    brew install watchman
    
  • Yarn

    npm為Node.js的一個包管理工具,類此于Linux的apt等媚赖,Node.js內置了npm無需單獨下載霜瘪。

    Yarn是 Facebook 提供的替代 npm 的工具,可以加速 node 模塊的下載惧磺。

    npm install -g yarn
    
  • Android Studio / Xode(Cocopods)

  • Visual Studio Code

三颖对、創(chuàng)建一個新項目

  • 普通的

    npx react-native init RNProject
    
  • 指定RN版本的

    npx react-native init RNProject --version X.XX.X
    
  • 還可以使用--template來使用一些社區(qū)提供的模板,例如帶有TypeScript配置的:

    npx react-native init AwesomeTSProject --template react-native-template-typescript
    

四磨隘、已有項目的集成

  • react-native在0.60 及以上版本的原生依賴是通過 CocoaPods 集成安裝的缤底。

  • 詳情可以看之前的文章: 傳送門

五、Debug

1番捂、項目運行起來个唧,搖一搖,選擇Debug设预,系統(tǒng)默認瀏覽器坑鱼,會自動打開一個網(wǎng)頁,使用Chrome絮缅,因為Safari會出現(xiàn)亂碼

http://localhost:8081/debugger-ui/

2、在Chrome中右擊呼股,選擇檢查

檢查

使用command + o 搜索對應Debug的js文件耕魄,打斷點,并運行

Debug

六彭谁、Flexbox布局

屬性 解釋 默認值
flexDirection 主軸的排列方向 column吸奴、row、column-reverse缠局、row-reverse column
flexWrap 子組件沿主軸排不下的時候则奥,如何換行 wrap、nowrap wrap
justifyContent 子組件在主軸上的排列方式 flex-start狭园、flex-end读处、center、space-between唱矛、space-around flex-start
alignItem 子組件在側軸方向排列位置 auto罚舱、flex-start井辜、flex-end、center管闷、stretch stretch
alignSelf 組件自己本身 auto粥脚、flex-start、flex-end包个、center刷允、stretch
flex 子組件占用父組件的比例 0

如果不了解CSS布局的,可能會比較懵碧囊,這里再具體解釋一下树灶,我們先來了解一下主軸和側軸的概念

主軸和側軸
  • 如果flexDirection為row,那么主軸就是x軸0 -> ∞ 方向呕臂,此時側軸就是y軸 0 -> ∞ 方向

    justifyContent:控制在x軸方向的位置破托,flex-start就是靠左,flex-end就是靠右歧蒋。

    alignItem:控制y軸方向的位置土砂,flex-start就是靠上,flex-end就是靠下谜洽。

  • 如果flexDirection為column萝映,那么主軸就是y軸0 -> ∞ 方向,此時側軸就是x軸 0 -> ∞ 方向

    justifyContent:控制y軸方向的位置阐虚,flex-start就是靠上序臂,flex-end就是靠下。

    alignItem:控制在x軸方向的位置实束,flex-start就是靠左奥秆,flex-end就是靠右。

七咸灿、常用的組件

  • View

  • Text

  • TextInput

  • Image

    <Image source={require('./img/icon.png')} style={styles.imageStyle} />
    
  • ScrollView

  • WebView

  • FlaList

八构订、其他

1、接口

  • props:對外的接口
  • state:對內的接口

2避矢、聲明周期

  • React-Nativ組件的聲明周期大體分為3個階段悼瘾,掛載、更新审胸、卸載亥宿,其中掛載和更新階段都會調用render()方法繪制視圖

    組件的每個聲明周期都提供了一些方法供我們調用,用來實現(xiàn)相應的需求和功能砂沛。

    RN掛載聲明周期
  • 掛載階段

    指的是組件的實例被創(chuàng)建到將其插入到DOM的過程

    函數(shù)名稱 解釋
    defaultProps() 此階段主要用于初始化一些默認屬性烫扼,在ES6語法中,則統(tǒng)一使用static成員來定義碍庵。
    constructor() 此方法是組件的構造方法材蛛,可以在此階段對組件的一些狀態(tài)進行初始化圆到。不同于defaultProps(),此方法定義的變量可以通過this.setState進行修改。
    componentWillMount() 在掛載前被立即調用卑吭。它在render()方法之前被執(zhí)行芽淡,因此在此方法中設置 state 不會導致重新渲染。
    render() 此方法主要用于渲染組件豆赏,返回JSX或其他組件構成DOM.同時挣菲,此方法
    componentDidMount() 此方法在掛載結束之后立馬調用,也就是在render()方法后執(zhí)行掷邦。開發(fā)者可以在此方法中獲取元素或者子組件白胀,也可以在層次方法中執(zhí)行網(wǎng)絡請求操作
  • 運行階段

    當組件經(jīng)過初始化后,程序就運行起來了抚岗,運行階段無論是修改props還是state或杠,系統(tǒng)都會調用shouldComponentUpdate()方法來判斷視圖是都需要渲染,如果需要渲染就會執(zhí)行render()方法執(zhí)行視圖重繪宣蔚,修改props的會比修改state多一個步驟向抢,props會先調用componentWillReceiveProps()方法接收props后,再判斷是否需要執(zhí)行更新

    運行階段的聲明周期

    函數(shù)名稱 解釋
    componentWillReceiveProps() 在掛載的組件接收到新的props時被調用胚委。它接收一個 Object類型的參數(shù) nextProps挟鸠,然后調用 this setState來更新組件的狀態(tài)。
    shouldComponentUpdate() 當組件接收到新的 props或 state時此方法就會被調用亩冬。此方法默認返回true艘希,用來保證數(shù)據(jù)變化時組件能夠重新渲染。當然硅急,開發(fā)者也可以重載此方法來決定組件是否需要執(zhí)行重新渲染覆享。
    componentWillUpdate() 如果shouldComponentUpdate()方法返回為true,則此方法會在組件重新渲染前被調用营袜。
    componentDidUpdate() 在組件重新渲染完成后被調用淹真,可以在此函數(shù)中得到渲染完。
  • 卸載階段

    主要指組件從掛載階段到將其從DOM中刪除的過程连茧,是組件生命周期的終點。

    除了正常移除組件外巍糯,組件的銷毀還可能是由其他情況引起的啸驯,如系統(tǒng)遇到錯誤崩潰、系統(tǒng)內存空間不足祟峦,以及用戶退出應用等罚斗。

    函數(shù)名稱 解釋
    componentWillUnmount() 在組件卸載和銷毀之前被立即調用≌悖可以在此方法中執(zhí)行
  • 函數(shù)的調用次數(shù)

    在組件的整個生命周期中针姿,每一個生命周期函數(shù)并不是只被調用一次袱吆,有的生命周期函數(shù)在整個生命周期階段可能被調用多次

    函數(shù)名稱 調用次數(shù) 是否更新狀態(tài)
    defaultProps 1(全局僅1次)
    constructor 1
    componentWillMount 1
    render ≥1
    componentDidMount 1
    componentWillReceiveProps ≥0
    shouldComponentUpdate ≥0
    componentWillUpdate ≥0
    componentDidUpdate ≥0
    componentWillUnmount 1
  • 虛擬DOM
    ????眾所周知,Web界面本質上是由DOM樹構成的距淫,當其中某個部分發(fā)生變化時绞绒,其實就是對應的DOM節(jié)點發(fā)生了變化。
    ????在 jQuery出現(xiàn)以前榕暇,前端開發(fā)人員如果要修改界面蓬衡,需要直接操作DOM節(jié)點。在這一時期彤枢,程序的代碼結構混亂狰晚,復雜度高、可維護性和兼容性都較差缴啡。不過壁晒,隨著 jQuery以及高度封裝AP的出現(xiàn),開發(fā)人員慢慢地從煩瑣的DOM操作中解脫出來业栅。MVM使用的數(shù)據(jù)雙向綁定和自動更新技術使得前端開發(fā)效率大幅提升秒咐,但是大量的事件綁定導致的執(zhí)行性能低下的問題依然存在。
    ????那么有沒有一種兼顧開發(fā)效率和執(zhí)行效率的方案呢式镐?答案是有的反镇。 ReactJS就是這么一種同時兼顧開發(fā)效率和執(zhí)行效率的技術框架雖然其JSX語法受到很多開發(fā)者的質疑,但是它的虛擬DOM技術卻得到了開發(fā)者的一致認可娘汞。此外歹茶,Vue框架也在2.0版本引入了這一機制。
    ????React中的組件并不是真實的DOM節(jié)點你弦,而是存在于內存之中的一種數(shù)據(jù)結構惊豺,叫作虛擬DOM。只有當它被插入文檔以后禽作,才會變成真實的DOM

    虛擬DOM

根據(jù) React的設計尸昧,所有的DOM變動都需要先反映在虛擬DOM上,再將實際發(fā)生變動的部分反映在真實DOM上旷偿,而這一過程的核心就是 DOM diff算法它可以減少不必要的DOM渲染烹俗,極大地提高組件的渲染性能。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末萍程,一起剝皮案震驚了整個濱河市幢妄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茫负,老刑警劉巖蕉鸳,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡潮尝,警方通過查閱死者的電腦和手機榕吼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勉失,“玉大人羹蚣,你說我怎么就攤上這事〈髦剩” “怎么了度宦?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長告匠。 經(jīng)常有香客問我戈抄,道長,這世上最難降的妖魔是什么后专? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任划鸽,我火速辦了婚禮,結果婚禮上戚哎,老公的妹妹穿的比我還像新娘裸诽。我一直安慰自己,他們只是感情好型凳,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布丈冬。 她就那樣靜靜地躺著,像睡著了一般甘畅。 火紅的嫁衣襯著肌膚如雪埂蕊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天疏唾,我揣著相機與錄音蓄氧,去河邊找鬼。 笑死槐脏,一個胖子當著我的面吹牛喉童,可吹牛的內容都是我干的。 我是一名探鬼主播顿天,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼堂氯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牌废?” 一聲冷哼從身側響起咽白,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畔规,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恨统,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡叁扫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年三妈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片莫绣。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡畴蒲,死狀恐怖,靈堂內的尸體忽然破棺而出对室,到底是詐尸還是另有隱情模燥,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布掩宜,位于F島的核電站蔫骂,受9級特大地震影響,放射性物質發(fā)生泄漏牺汤。R本人自食惡果不足惜辽旋,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望檐迟。 院中可真熱鬧补胚,春花似錦、人聲如沸追迟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敦间。三九已至瓶逃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間每瞒,已是汗流浹背金闽。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剿骨,地道東北人代芜。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像浓利,于是被迫代替她去往敵國和親挤庇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容