react Native基礎(chǔ)部分

安裝步驟

  • 1.安裝依賴
    必須安裝的依賴有:Node外遇、Python2票灰、JDK 和 Android Studio( Node 的版本應(yīng)大于等于 12女阀,Python 的版本必須為 2.x(不支持 3.x)宅荤,而 JDK 的版本必須是 1.8(目前不支持 1.9 及更高版本))
  • 2.cmd安裝
    nrm 管理npm下載源:npm install nrm -g和nrm ues taobao
    react-native-cli native腳手架:npm install react-native-cli-g
  • 3.配置環(huán)境變量
    ANDROID_HOME---安卓sdk所在的目錄
    platform-tools 平臺(tái)工具:
    C:\Users\Administrator\AppData\Local\Android\Sdk\platform-tools;
    Java jdk/bin 目錄:
    C:\Program Files\Java\jdk1.8.0_202\bin
  • 4.初始化項(xiàng)目
    npx react-native init myapp
    添加安卓依賴包的源地址(阿里):android/build.gradle
  • 5.連接模擬器(mumu)
    先打開mumu模擬器,然后cmd輸入adb connect 127.0.0.1:7555
  • 6.運(yùn)行項(xiàng)目
    npx react-native run-android
  • 7.在VSCode里打開該項(xiàng)目
    修改APP.js浸策,制作自己想要的頁面效果

核心組件和原生組件

核心組件

JSX——是一種在 JavaScript 中嵌入 XML 結(jié)構(gòu)的語法

例如:<View><Text>Hello world!</Text></View>寫法

Props(屬性)

render() {
    let pic = {
      uri: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Bananavarieties.jpg'
    };
    return (
      <Image source={pic} style={{width: 193, height: 110}} />
    );
  }

{pic}外圍有一層括號(hào)冯键,我們需要用括號(hào)來把pic這個(gè)變量嵌入到 JSX 語句中。括號(hào)的意思是括號(hào)內(nèi)部為一個(gè) js 變量或表達(dá)式庸汗,需要執(zhí)行后取值惫确。

自定義的組件也可以使用props。通過在不同的場(chǎng)景使用不同的屬性定制蚯舱,可以盡量提高自定義組件的復(fù)用范疇改化。只需在render函數(shù)中引用this.props,然后按需處理即可枉昏。下面是一個(gè)例子:

import React, { Component } from 'react';
import { Text, View } from 'react-native';

class Greeting extends Component {
  render() {
    return (
      <View style={{alignItems: 'center', marginTop: 50}}>
        <Text>Hello {this.props.name}!</Text>
      </View>
    );
  }
}

export default class LotsOfGreetings extends Component {
  render() {
    return (
      <View style={{alignItems: 'center'}}>
        <Greeting name='Rexxar' />
        <Greeting name='Jaina' />
        <Greeting name='Valeera' />
      </View>
    );
  }
}

最終3個(gè)名字會(huì)被依次輸出陈肛。

State(狀態(tài))

我們使用兩種數(shù)據(jù)來控制一個(gè)組件:props和state。props是在父組件中指定兄裂,而且一經(jīng)指定句旱,在被指定的組件的生命周期中則不再改變。對(duì)于需要改變的數(shù)據(jù)晰奖,我們需要使用state谈撒。

一般來說,需要在class中聲明一個(gè)state對(duì)象匾南,然后在需要修改時(shí)調(diào)用setState方法啃匿。典型的場(chǎng)景是在接收到服務(wù)器返回的新數(shù)據(jù),或者在用戶輸入數(shù)據(jù)之后蛆楞。你也可以使用一些“狀態(tài)容器”比如Redux來統(tǒng)一管理數(shù)據(jù)流立宜。
每次調(diào)用setState時(shí),BlinkApp 都會(huì)重新執(zhí)行 render 方法重新渲染臊岸。
【注意】:

  • 一切界面變化都是狀態(tài)state變化
  • state的修改必須通過setState()方法
  • this.state.likes = 100; // 這樣的直接賦值修改無效!
  • setState 是一個(gè) merge 合并操作尊流,只修改指定屬性帅戒,不影響其他屬性
  • setState 是異步操作,修改不會(huì)馬上生效

樣式的書寫

在return里面寫:

 <View>
           <Text style={[styles.red,styles.big]}>我是內(nèi)聯(lián)樣式文本</Text>
           <Text style={{fontWeight:"bold"}}>我是行內(nèi)樣式文本</Text>
           <Text style={{...styles.big,color:"yellow", fontStyle:"italic"
}}>我是內(nèi)聯(lián)+行內(nèi)混合樣式文本</Text>
         </View>

在render函數(shù)外部定義樣式:

const styles = StyleSheet.create({
  center:{justifyContent:"center",alignItems:"center"},
  row:{flexDirection:"row",justifyContent:"space-around"},
  col:{flex:1,height:180},
  big:{fontSize:48},
  red:{color:"#f30"}
});

文本輸入框組件

TextInput是一個(gè)允許用戶輸入文本的基礎(chǔ)組件崖技。它有一個(gè)名為onChangeText的屬性逻住,此屬性接受一個(gè)函數(shù),而此函數(shù)會(huì)在文本變化時(shí)被調(diào)用迎献。另外還有一個(gè)名為onSubmitEditing的屬性瞎访,會(huì)在文本被提交后(用戶按下軟鍵盤上的提交鍵)調(diào)用。

觸摸組件(Button)

<Button 
            onPress={()=>alert("你好世界")}
            title="確定"
            color="#f30"></Button>

其中onPress是回調(diào)函數(shù)吁恍,title是按鈕上顯示的文字扒秸,color是按鈕顏色播演;

也可以作為警告框,擁有多個(gè)選項(xiàng)伴奥,從而彈出不同內(nèi)容:

<Button 
            onPress={()=>Alert.alert("小胖別吃了好嗎写烤?","你已經(jīng)160斤了!",[
              {text:'不行',onPress:()=>alert("小胖:不行我餓")},
              {text:'好吧',onPress:()=>alert("小胖:好吧我不吃了")},
              {text:'難過',onPress:()=>alert("小胖:我是單身狗拾徙,胖點(diǎn)怕啥")},
            ])}
            title="詢問小胖"
            color="blue"></Button>

可以看到我們?cè)O(shè)置了三個(gè)選項(xiàng)洲炊,每一項(xiàng)都會(huì)彈出不同的內(nèi)容,內(nèi)容也是自己設(shè)置的尼啡;

觸摸組件(Touchable 系列組件)

這個(gè)組件的樣式是固定的暂衡。所以如果它的外觀并不怎么搭配你的設(shè)計(jì),那就需要使用TouchableOpacity或是TouchableNativeFeedback組件來定制自己所需要的按鈕

  • 使用TouchableHighlight來制作按鈕或者鏈接崖瞭。注意此組件的背景會(huì)在用戶手指按下時(shí)變暗狂巢。

  • 在 Android 上還可以使用TouchableNativeFeedback,它會(huì)在用戶手指按下時(shí)形成類似墨水漣漪的視覺效果读恃。

  • TouchableOpacity會(huì)在用戶手指按下時(shí)降低按鈕的透明度隧膘,而不會(huì)改變背景的顏色。

  • 如果想在處理點(diǎn)擊事件的同時(shí)不顯示任何視覺反饋寺惫,則需要使用TouchableWithoutFeedback

  • 某些場(chǎng)景中可能需要檢測(cè)用戶是否進(jìn)行了長按操作疹吃。可以在上面列出的任意組件中使用onLongPress屬性來實(shí)現(xiàn)西雀。

滾動(dòng)視圖

ScrollView是一個(gè)通用的可滾動(dòng)的容器萨驶,可以在其中放入多個(gè)組件和視圖,而且這些組件并不需要是同類型的艇肴。ScrollView 不僅可以垂直滾動(dòng)腔呜,還能水平滾動(dòng)(通過horizontal屬性來設(shè)置)。
ScrollView適合于顯示數(shù)量不多的滾動(dòng)元素再悼。放置在ScrollView中的所有組件都會(huì)被渲染

長列表

FlatList組件用于顯示一個(gè)垂直的滾動(dòng)列表核畴,其中的元素之間的結(jié)構(gòu)近似而僅數(shù)據(jù)不同。
FlatListScrollView不同的是冲九,FlatList并不立即渲染所有元素谤草,而是優(yōu)先渲染屏幕上可見的元素。
FlatList組件必須的兩個(gè)屬性是datarenderItem莺奸。data是列表的數(shù)據(jù)源丑孩,而renderItem則從數(shù)據(jù)源中逐個(gè)解析數(shù)據(jù),然后返回一個(gè)設(shè)置好格式的組件來渲染灭贷。
例如渲染數(shù)據(jù):

<FlatList
        keyExtractor={item=>item.ID}
        data={this.state.movies}
        numColumns={3}   //一行顯示3個(gè)
        columnWrapperStyle={styles.row} //增加下方寫的樣式
        renderItem={({item})=>{return(
          <View style={{marginTop:20}} key={item.ID}>
            <Image 
              style={{width:135,height:160}} 
              source={{uri:item.defaultImage}}></Image>
              <Text style={{marginTop:5,textAlign:"center"}}>{item.MovieName}</Text>
          </View>
        )}}
        />
  • flatList長列表組件温学,
  • keyExtractor是key抽取
  • data數(shù)據(jù)指定
  • numColumns行的數(shù)量,
  • renderItem列的渲染
  • columnWrapperStyle行的樣式指定

網(wǎng)絡(luò)請(qǐng)求

一般長列表的數(shù)據(jù)都是通過網(wǎng)絡(luò)請(qǐng)求獲取的甚疟;然后渲染到頁面仗岖;
傳統(tǒng)方式如下:

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',   //請(qǐng)求方式
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',    //請(qǐng)求頭
  },
  body: 'key1=value1&key2=value2',     //請(qǐng)求體
});

上面的示例演示了如何發(fā)起請(qǐng)求逃延。很多情況下,你還需要處理服務(wù)器回復(fù)的數(shù)據(jù)箩帚。網(wǎng)絡(luò)請(qǐng)求天然是一種異步操作真友;異步的意思是你應(yīng)該提取方法會(huì)返回一個(gè)Promise,這種模式可以簡化異步風(fēng)格的代碼;
如下所示:

function getMoviesFromApiAsync() {   //獲取電影xx的方法紧帕,自己創(chuàng)建的
  return fetch('https://facebook.github.io/react-native/movies.json')   //接口網(wǎng)站
    .then((response) => response.json())    //將請(qǐng)求到的數(shù)據(jù)轉(zhuǎn)為json格式
    .then((responseJson) => {
      return responseJson.movies;   //請(qǐng)求成功返回?cái)?shù)據(jù)
    })
    .catch((error) => {
      console.error(error);    //請(qǐng)求失敗盔然,輸出錯(cuò)誤
    });
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市是嗜,隨后出現(xiàn)的幾起案子愈案,更是在濱河造成了極大的恐慌,老刑警劉巖鹅搪,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件站绪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡丽柿,警方通過查閱死者的電腦和手機(jī)恢准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甫题,“玉大人馁筐,你說我怎么就攤上這事∽狗牵” “怎么了敏沉?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炎码。 經(jīng)常有香客問我盟迟,道長,這世上最難降的妖魔是什么潦闲? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任攒菠,我火速辦了婚禮,結(jié)果婚禮上歉闰,老公的妹妹穿的比我還像新娘要尔。我一直安慰自己,他們只是感情好新娜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著既绩,像睡著了一般概龄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上饲握,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天私杜,我揣著相機(jī)與錄音蚕键,去河邊找鬼。 笑死衰粹,一個(gè)胖子當(dāng)著我的面吹牛锣光,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铝耻,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼誊爹,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了瓢捉?” 一聲冷哼從身側(cè)響起频丘,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泡态,沒想到半個(gè)月后搂漠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡某弦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年桐汤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靶壮。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡怔毛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亮钦,到底是詐尸還是另有隱情馆截,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布蜂莉,位于F島的核電站蜡娶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏映穗。R本人自食惡果不足惜窖张,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚁滋。 院中可真熱鬧宿接,春花似錦、人聲如沸辕录。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽走诞。三九已至副女,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蚣旱,已是汗流浹背碑幅。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工戴陡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沟涨。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓恤批,卻偏偏與公主長得像,于是被迫代替她去往敵國和親裹赴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喜庞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 1.React Native組件 獨(dú)立的、可重用的模塊篮昧。有3種方式可以創(chuàng)建組件:1. ES6方式創(chuàng)建赋荆;2. ES5...
    Lethe35閱讀 725評(píng)論 0 0
  • 上半年帶領(lǐng)公司移動(dòng)端團(tuán)隊(duì)開始使用ReactNative,這是當(dāng)時(shí)我在公司內(nèi)部分享ReactNative開發(fā)的文檔懊昨。...
    PandaXiong閱讀 460評(píng)論 0 3
  • 1.對(duì)于React-Native開發(fā)窄潭,僅僅有基礎(chǔ)前端開發(fā)的知識(shí)是不夠的,你還需要了解和掌握的有: ? Node.j...
    glenlg閱讀 524評(píng)論 0 1
  • 在APP開發(fā)過程中酵颁,列表可謂是頁面最重要的一種展現(xiàn)形式了嫉你,幾乎每一個(gè)APP都離不了列表,那么在這篇文章中將向大家分...
    Jason_yuanxd閱讀 1,517評(píng)論 0 2
  • 一. 簡介 一個(gè)核心組件躏惋,用于高效地顯示一個(gè)可以垂直滾動(dòng)的變化的數(shù)據(jù)列表幽污。最基本的使用方式就是創(chuàng)建一個(gè)ListVi...
    飛奔的小馬閱讀 1,238評(píng)論 0 2