React-Native 初體驗

前言

這段時間晶框,項目中某些模塊嘗試了下react-native 也遇到過一些坑點拐纱,這里做個記錄挺益,希望如我一樣的前端新人不會再被這些問題折磨到涕蚤。


  • 環(huán)境搭建

在學(xué)習資料以及社區(qū)方面RN的資料還是相比比較豐富的宪卿,只需要按著官方的文檔來操作一般不會有啥問題。
官方文檔地址

  • 初始化項目

環(huán)境搭建后之后万栅,就可以創(chuàng)建我們的RN項目了佑钾,
react-native init 項目名稱
等項目初始化完成之后,我一般是找到項目目錄里面iOS目錄直接使用Xcode來啟動項目 也可以使用
react-native run-ios或者 react-native run-Android來啟動烦粒。
當服務(wù)器了鏈接完成程序也就啟動了

*項目結(jié)構(gòu)以及加載過程

剛開始的時候我其實有點疑惑的休溶,就是我們運行Xcode時是怎么和這些js文件鏈接到一起的。
在我們打開的Xcode``appDelegate的文件中可以看到


 jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];

 RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                     moduleName:@"RNDemo"
                                              initialProperties:nil
                                                  launchOptions:launchOptions];

這里指定了加載的包名以及根文件index 根據(jù)moduleName 來初始化一個View最后渲染到主窗口上來顯示扰她。也就是說操作所有的js代碼的布局樣式 最后都是經(jīng)由RCTRootView來顯示的兽掰。

現(xiàn)在我們打開rn的項目

目錄結(jié)構(gòu)

可以看到在rn的工程中有一個index的js文件
在這個文件中有兩個重要的方法。

// 注冊程序入口組件, 程序啟動時根據(jù)這個注冊的組件名稱去加載
// // 第一個參數(shù) 'RNDemo' 要跟載xocde 工程里注冊的一致,
// 第二個參數(shù) 返回當前創(chuàng)建的模塊名稱徒役、孽尽、class  RNDemo extends Component

AppRegistry.registerComponent('RNDemo', ()=>RNDemo);

另一個就是render方法。所有的UI展示需要通過這個方法來渲染
當組件要顯示時忧勿,系統(tǒng)也會自動調(diào)用這個方法

 render(){
        return(
        )
    }

現(xiàn)在我們可以在這個方法里返回一個UI組件看看會有什么效果杉女。

render(){
        return(
           <View></View>
        )
    }

當然在運行之前我們需要導(dǎo)入一些相應(yīng)的組件

import React, {Component} from  'react'

// 2.導(dǎo)入常用組件,注冊組件,樣式組件,View組件,Text組件
import
{
    AppRegistry,
    StyleSheet,
    Text,
    View
}

這里忍不住吐槽一句,在RN里貌似沒有我們iOS的主頭文件一說鸳吸,用到一個控件就要導(dǎo)入一次還是蠻麻煩的

現(xiàn)在應(yīng)該可以啟動起來了熏挎。。晌砾。坎拐。。养匈。
但是應(yīng)該是一片空白哼勇,因為我們沒有設(shè)置樣式。

  return(
           <View style={{flex:1, backgroundColor: 'red'}}></View>
        )

這里我將頁面設(shè)置為沾滿全屏呕乎,背景顏色為紅色猴蹂。
樣式的設(shè)置也可以單獨抽取到StyleSheet中去設(shè)置,這樣更容易閱讀楣嘁。

const styles = StyleSheet.create({
    mainStyles:{
        flex:1,
        backgroundColor: 'red'
    },

這里遇到一個坑 應(yīng)該是只有想我這樣的新手才會碰到這樣的傻瓜問題磅轻。
當時我根據(jù)文檔在render方法中返回一個View組件
但是運行的時候一直報錯珍逸,用我稀有的單詞儲備量來推算說的意思是字符串必須在Text組件中。 但是我明明返回的只是一個單純的View組件啊聋溜。

運行報錯

對照了下代碼也沒發(fā)現(xiàn)有啥不對谆膳。

class RNDemo extends Component {
    // 當一個組件要顯示的時候,就會自動調(diào)用render,渲染組件

    render(){
        return(
           <View> </View>
        )
    }
}

就這兩句代碼 也不可能寫錯啊。真是百思不得七姐啊撮躁。后來觀察和實例代碼的差別發(fā)現(xiàn)貌似只有 <View> </View> 這里的中間有一個空格的差別啊漱病,遂刪掉多余的空格,竟然真的人運行起來了把曼。杨帽。真的是郁悶好久。 后來發(fā)現(xiàn)嗤军,關(guān)于這些UI組件注盈。
可以這么寫

<View style={styles.mainStyles}></View>

也可以

 <View style={styles.mainStyles}>

 </View>

但是就是不能 <View> </View> 你說氣人不氣人。叙赚。

timg.jpg

  • 生命周期
    我們都知道iOS的每個頁面都有生命周期老客,而rn也不例外。
在組件初始化的時候調(diào)用震叮,類屬于我們OC的[[alloc]init]
   constructor(props){
       super(props)
   }
  // 組件將要被加載到視圖之前調(diào)用
   componentWillMount() {

   }
   // 當一個組件要顯示的時候,就會自動調(diào)用render,渲染組件
   render(){
       return(
           <View> </View>
       )
   }
//在調(diào)用了render方法胧砰,組件加載成功并被成功渲染出來之后,所要執(zhí)行的后續(xù)操作苇瓣,一般都會在這個函數(shù)中進行尉间,比如經(jīng)常要面對的網(wǎng)絡(luò)請求等加載數(shù)據(jù)操作
// 可以看做是oc中的ViewDidLoad
   componentDidMount() {

   }
   // 當程序即將要卸載時會調(diào)用,類似于OC的delloc方法 
   componentWillUnmount() {
       
   }

(這些只是沒有數(shù)據(jù)更改時的調(diào)用順序如果涉及到,State或者props發(fā)生改變時击罪,則會觸發(fā)其他的函數(shù))

 // 組件被更新之前會自動觸發(fā)此函數(shù) 哲嘲,根據(jù)這個函數(shù)中返回值,來決定是否刷新頁面外邓。
  // 如果返回false 則不會重新調(diào)用render函數(shù)撤蚊,重新渲染頁面
  shouldComponentUpdate() {
    return true
  }
// 組件即將刷新的時候被觸發(fā)古掏,如果shouldComponentUpdate返回的是false 則不會回調(diào)此函數(shù)
  componentWillUpdate() {

  }
  // 組件開始刷新
  render() {
    console.log('app輸入')
    return (
      <div>
        {this.state.name}
        <Test />
        <button onClick={this.renderText.bind(this)}>touch me</button>
      </div>
    );
  }
  // 組件刷新完成調(diào)用
  componentDidUpdate() {

  }

 // 最后說下這個
  // 當一個組件從父控件中接收到參數(shù)损话,如果這個子組件第一次存在于父控件中,不會執(zhí)行這個函數(shù)槽唾。
  // 只有當這個子組件再次存在于父組件上時才會觸發(fā)
  componentWillReceiveProps() {
    
  }

另外說一個要點丧枪,創(chuàng)建react-native組件時,組件名稱首字母必須是大寫的庞萍。被坑過拧烦。。钝计。恋博。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末齐佳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子债沮,更是在濱河造成了極大的恐慌炼吴,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫衩,死亡現(xiàn)場離奇詭異硅蹦,居然都是意外死亡,警方通過查閱死者的電腦和手機闷煤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門童芹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鲤拿,你說我怎么就攤上這事假褪。” “怎么了皆愉?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵嗜价,是天一觀的道長。 經(jīng)常有香客問我幕庐,道長久锥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任异剥,我火速辦了婚禮瑟由,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冤寿。我一直安慰自己歹苦,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布督怜。 她就那樣靜靜地躺著殴瘦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪号杠。 梳的紋絲不亂的頭發(fā)上蚪腋,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音姨蟋,去河邊找鬼屉凯。 笑死,一個胖子當著我的面吹牛眼溶,可吹牛的內(nèi)容都是我干的悠砚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼堂飞,長吁一口氣:“原來是場噩夢啊……” “哼灌旧!你這毒婦竟也來了绑咱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤枢泰,失蹤者是張志新(化名)和其女友劉穎羡玛,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宗苍,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡稼稿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了讳窟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让歼。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丽啡,靈堂內(nèi)的尸體忽然破棺而出谋右,到底是詐尸還是另有隱情,我是刑警寧澤补箍,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布改执,位于F島的核電站,受9級特大地震影響坑雅,放射性物質(zhì)發(fā)生泄漏辈挂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一裹粤、第九天 我趴在偏房一處隱蔽的房頂上張望终蒂。 院中可真熱鬧,春花似錦遥诉、人聲如沸拇泣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霉翔。三九已至,卻和暖如春苞笨,著一層夾襖步出監(jiān)牢的瞬間债朵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工猫缭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留葱弟,地道東北人壹店。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓猜丹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硅卢。 傳聞我的和親對象是個殘疾皇子射窒,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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

  • 混合開發(fā)一直都比較想接觸的技術(shù)藏杖,所以這幾天就學(xué)習了下React Native的配置及JavaScript的基礎(chǔ),體...
    Ruheng閱讀 1,516評論 3 13
  • 我希望自己可以很特別 我希望自己可以更好 我希望自己可以無所不能 我希望自己可以滿足所有人的需求 我希望........
    竺子閱讀 427評論 0 0
  • 下班后脉顿,石月拖著令她疲憊不堪的身軀回到租住的屋子蝌麸,脫鞋,放包艾疟,掛衣服来吩,倒杯水,一口悶蔽莱,坐以來弟疆,吐口氣,嘆一聲盗冷,拿手...
    哈嗒main閱讀 212評論 0 0
  • (2018-07-31-周二 21:21:30) 6。刪除(Ctrl + Shift + Del) 從您的集合中刪...
    菜五閱讀 160評論 0 0
  • 工作了將近三年的時候,離得臆想的風花雪月越來越遠故爵,離得自己的認知水平越來越近讼育。 不過是承認自己偽了多年文藝青年。小...
    慢半拍shining閱讀 382評論 2 0