React Native 組件 X 屬性|狀態(tài) X 樣式

上一篇《React Native 環(huán)境搭建》

前篇已介紹了 RN 的環(huán)境搭建,作為第二篇沥阱,介紹 RN 的基礎(chǔ)知識(shí)為后續(xù)打下基礎(chǔ)泣崩。接著上一篇,接下來的示例代碼可以在之前留下的代碼上直接修改并運(yùn)行等孵。

好了稚照,切入正題。RN 如果需要在軟件架構(gòu)上進(jìn)行分類的話俯萌,我會(huì)把它歸到界面顯示框架果录。原因是

  1. RN 面向的移動(dòng)端開發(fā);
  2. RN 主要負(fù)責(zé)界面元素的搭建咐熙;
  3. 雖然可以使用 JavaScript 邏輯代碼弱恒,其用途還是為了數(shù)據(jù)轉(zhuǎn)換,便于控件的顯示或者數(shù)據(jù)綁定。

那么一個(gè)界面顯示框架需要解決怎樣的問題呢?界面搭建文黎、數(shù)據(jù)綁定湿滓、后端交互锥惋。之后再來交代后端交互做鹰,先來看一下前兩個(gè)僧鲁。界面的搭建再拆分為UI控件與樣式伤柄。RN 中的控件被定義為組件 Component并扇,樣式則是借鑒了 HTML 中的層疊樣式表 CSS去团。數(shù)據(jù)綁定是通過屬性和狀態(tài)來完成的。接下來逐一介紹它們穷蛹。

組件

RN 應(yīng)用是基于組件 Component 的集合土陪,開發(fā)可以通過組件間有目的的排列與組合來完成整個(gè)應(yīng)用。何為組件肴熏?直接或者間接擴(kuò)展了 Component 對(duì)象的都屬于組件鬼雀。組件必須具備有一個(gè)關(guān)鍵方法 render() ,正如這個(gè)方法名字暗示的一樣蛙吏,它是用來渲染界面的源哩。為何關(guān)鍵呢?組件的職責(zé)就是負(fù)責(zé)繪制界面鸦做。下面的例子中励烦,定義了一個(gè)叫做 HelloWorldApp 的組件,在其 render() 方法返回 <Text>泼诱。 <Text> 是 RN 預(yù)先定義用來顯示文本的基礎(chǔ)組件坛掠。這樣一個(gè)自定義組件就寫好了。

class HelloWorldApp extends Component {
  render() {
    return (
      <Text>Hello world!</Text>
    );
  }
}

屬性

了解網(wǎng)頁(yè)開發(fā)的人應(yīng)該非常熟悉 HTML 語言中每個(gè)標(biāo)簽都有一些屬性治筒,就像 A 標(biāo)簽會(huì)有 href 屬性來表示需要重定向的地址屉栓。在 RN 中也是一樣,每個(gè)組件可以寫成類似 HTML 的標(biāo)簽矢炼,就像之前例子中的 <Text>系瓢。下面的例子是 RN 中用來顯示圖片的組件,與 HTML 的 <img> 標(biāo)簽不同的是句灌,圖片地址是用 source 屬性來指定的夷陋。

    <Image source={pic} style={{width: 193, height: 110}} />

比 HTML 標(biāo)簽更強(qiáng)大的是,RN 組件的屬性是可以自定義的胰锌。屬性用來表示常量骗绕,如預(yù)先知道的圖片地址,需要顯示的大小等等资昧,也就是說在定義清楚以后酬土,組件生命周期中是不會(huì)改變的。問題來的格带,在編程中除了常量還有變量撤缴,那么變量該如何處理呢刹枉?如果顯示的圖片需要在運(yùn)行時(shí)發(fā)生改變?cè)趺崔k?接下來要介紹的狀態(tài)就是用來處理此類情況的屈呕。

狀態(tài)

狀態(tài)本身很好理解微宝,即物質(zhì)系統(tǒng)所處的狀況,如形狀虎眨、溫度蟋软、顏色,一般可以使用物理量來表示嗽桩。用在控件上就是指某個(gè)時(shí)間段內(nèi)控件的顯示情況岳守,這個(gè)情況可能隨著用戶的操作或者時(shí)間發(fā)生改變。下面的例子中定義了一個(gè)組件碌冶,其中顯示的文本可以被隱藏湿痢。注意它的構(gòu)造器,定義了一個(gè)狀態(tài) showText扑庞,用以標(biāo)記是否顯示文本蒙袍。然后在 render() 方法中使用,先判斷狀態(tài)是否要顯示文本嫩挤,需要?jiǎng)t直接顯示 text 屬性,否則就用空字符串替換掉消恍。

class Blink extends Component {
  constructor(props) {
    super(props);
    this.state = { showText: true };    
  }

  render() {
    // 根據(jù)當(dāng)前showText的值決定是否顯示text內(nèi)容
    let display = this.state.showText ? this.props.text : ' ';
    return (
      <Text>{display}</Text>
    );
  }
}

查看組件中的狀態(tài)是如何工作的岂昭,需要響應(yīng)用戶的操作或者編寫一個(gè)時(shí)間函數(shù)改變 showText 屬性。下面就來修改構(gòu)造函數(shù)狠怨,添加注釋之后的語句约啊,刷新一下看看效果。

constructor(props) {
    super(props);
    this.state = { showText: true };
    
    // 每1000毫秒對(duì)showText狀態(tài)做一次取反操作
    setInterval(() => {
      this.setState(previousState => {
        return { showText: !previousState.showText };
      });
    }, 1000);
}

樣式

RN 的樣式與網(wǎng)頁(yè)開發(fā)中使用的層疊樣式表類似佣赖,有兩種定義方式恰矩,可以直接在組件的 style 屬性中定義。下面的例子中憎蛤,定義了一個(gè)背景色是紅色外傅,高和寬都是50的文本。

<Text style={{width:50, height:50, backgroundColor: 'f00'}}></Text>

第二種方式像獨(dú)立的 CSS 申明一樣俩檬,可以在各組件間重復(fù)使用萎胰。

<Text style={styles.redtext}></Text>

const styles = StyleSheet.create({
  redtext: {
    color: '#f00',
    width: 50,
    height: 50,
  },
});

總結(jié)

這篇從 RN 的構(gòu)成最基本的元素組件開始,快速介紹了組件的屬性棚辽、狀態(tài)和如何定義樣式技竟。下一篇要開始準(zhǔn)備動(dòng)手做一個(gè)小的應(yīng)用程序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末屈藐,一起剝皮案震驚了整個(gè)濱河市榔组,隨后出現(xiàn)的幾起案子熙尉,更是在濱河造成了極大的恐慌,老刑警劉巖搓扯,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件检痰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡擅编,警方通過查閱死者的電腦和手機(jī)攀细,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱态,“玉大人谭贪,你說我怎么就攤上這事〗醯#” “怎么了俭识?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)洞渔。 經(jīng)常有香客問我套媚,道長(zhǎng),這世上最難降的妖魔是什么磁椒? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任堤瘤,我火速辦了婚禮,結(jié)果婚禮上浆熔,老公的妹妹穿的比我還像新娘本辐。我一直安慰自己,他們只是感情好医增,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布慎皱。 她就那樣靜靜地躺著,像睡著了一般叶骨。 火紅的嫁衣襯著肌膚如雪茫多。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天忽刽,我揣著相機(jī)與錄音天揖,去河邊找鬼。 笑死缔恳,一個(gè)胖子當(dāng)著我的面吹牛宝剖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歉甚,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼万细,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赖钞,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤腰素,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后雪营,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弓千,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年献起,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洋访。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谴餐,死狀恐怖姻政,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情岂嗓,我是刑警寧澤汁展,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站厌殉,受9級(jí)特大地震影響食绿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜公罕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一器紧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧楼眷,春花似錦品洛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)帽揪。三九已至硝清,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間转晰,已是汗流浹背芦拿。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留查邢,地道東北人蔗崎。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像扰藕,于是被迫代替她去往敵國(guó)和親缓苛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,082評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)邓深、插件未桥、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,095評(píng)論 4 62
  • 1笔刹、先把整個(gè)工程文件夾名改為新的工程名。 2 將舊項(xiàng)目文件夾和Tests文件名夾修改為新的名稱,修改后如下圖所示 ...
    ZYWu閱讀 11,472評(píng)論 12 21
  • 裘同學(xué)特別有心的買了一瓶水 可謂精挑細(xì)選 結(jié)果沒有緩解我的孕吐 反而更嚴(yán)重了 哈哈
    PWong閱讀 165評(píng)論 0 0
  • 師范學(xué)校院落較小冬耿,操場(chǎng)只有兩個(gè)籃球場(chǎng)面積舌菜,同學(xué)們玩玩籃球,做做廣播操尚可亦镶,但如果跑操就不行了日月。學(xué)校每天早晨例行組織...
    老吳同志簡(jiǎn)書閱讀 148評(píng)論 0 0