React Native實(shí)戰(zhàn)開發(fā)3:模塊劃分

本教程內(nèi)容和https://zhiwehu.gitbooks.io/react-native/content/ 同步更新。

模塊劃分

接下來我們來進(jìn)行模塊劃分,首先我們可以看到在項(xiàng)目根目錄有2個(gè)index文件竭沫,分別是:

  • index.ios.js:iOS App主文件
  • index.android.js Android App主文件

我們刪除掉原來的代碼,改成下面的代碼:

// 導(dǎo)入AppRegistry模塊
import {
  AppRegistry
} from 'react-native';

// 導(dǎo)入我們的App模塊
import App from "./app";

// 注冊App
AppRegistry.registerComponent('todo', () => App);

我們在項(xiàng)目根目錄創(chuàng)建三個(gè)js文件,分別是:

  • app.js:iOS和Android通用主文件
  • header.js:Header模塊
  • footer.js:Footer模塊

接下來我們分別創(chuàng)建這三個(gè)文件钞翔。


app.js

// 引入React和Component
import React, { Component } from "react";
// 引入View,類似于html的Div
import { View, Text, } from "react-native";
// 引入我們的Header模塊
import Header from "./header";
// 引入我們的Footer模塊
import Footer from "./footer";

// 定義App類炼绘,這個(gè)類是Component的子類
class App extends Component {
  /*
   實(shí)現(xiàn)App類的render方法嗅战,這個(gè)方法返回一個(gè)View,
   其組成分別是Header, Content和Footer
   */
  render() {
    return (
      <View>
        <Header />
        <View>
          <Text>我是Content</Text>
        </View>
        <Footer />
      </View>
    );
  }
}

// 導(dǎo)出這個(gè)模塊俺亮,供外部調(diào)用
export default App;

App類的render()方法是App模塊的渲染方法驮捍,該方法返回一個(gè)View模塊,其組成是Header和Footer脚曾,中間是一個(gè)子View东且。


header.js

// 引入React和Component
import React, { Component } from "react";
// 引入Text,顯示文字
import { View, Text } from "react-native";

// 定義Header類本讥,這個(gè)類是Component的子類
class Header extends Component {
  /*
   實(shí)現(xiàn)Header類的render方法珊泳,這個(gè)方法返回一個(gè)View,顯示Footer
   */
  render() {
    return (
      <View>
        <Text>我是Header</Text>
      </View>
    );
  }
}

// 導(dǎo)出這個(gè)模塊拷沸,供外部調(diào)用
export default Header;


footer.js

// 引入React和Component
import React, { Component } from "react";
// 引入Text色查,顯示文字
import { View, Text } from "react-native";

// 定義Footer類,這個(gè)類是Component的子類
class Footer extends Component {
  /*
   實(shí)現(xiàn)Header類的render方法撞芍,這個(gè)方法返回一個(gè)View秧了,顯示Footer
   */
  render() {
    return (
      <View>
        <Text>我是Footer</Text>
      </View>
    );
  }
}

// 導(dǎo)出這個(gè)模塊,供外部調(diào)用
export default Footer;

第二次運(yùn)行

StyleSheet

我們需要修改一下樣式序无,

  1. Header把系統(tǒng)狀態(tài)欄檔住了
  2. Content需要彈性高度

修改app.js代碼验毡,導(dǎo)入StyleSheet

import { View, Text, StyleSheet } from "react-native";

使用StyleSheet.create()創(chuàng)建一個(gè)styles對象

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#F5F5F5",
    paddingTop: 30,
  },
  content: {
    flex: 1
  }
});

然后衡创,分別給最外層的View以及content的View設(shè)置style屬性。

render() {
  return (
    <View style={styles.container}>
      <Header />

      <View style={styles.content}>
        <Text>我是Content</Text>
      </View>

      <Footer />
    </View>
  );
}

再次運(yùn)行晶通,結(jié)果如下:
![](https://zhiwehu.gitbooks.io/react-native/content/assets/third run.png)

看一下在Android上運(yùn)行的樣子:
![](https://zhiwehu.gitbooks.io/react-native/content/assets/android third run.png)

注意璃氢,在Android上運(yùn)行的時(shí)候,Header離狀態(tài)欄距離太大了狮辽,因?yàn)锳ndroid不需要設(shè)置paddingTop而不會(huì)檔住狀態(tài)欄一也,所以這個(gè)paddingTop只需要給iOS設(shè)置就可以了。接下來我們來使用Platform來實(shí)現(xiàn)這個(gè)功能隘竭。

Platform

import { View, Text, StyleSheet, Platform } from "react-native";
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "#F5F5F5",
    ...Platform.select({
      ios: {
        paddingTop: 30
      }
    })
  },
  content: {
    flex: 1
  }
});

再來看看Android的效果
![](https://zhiwehu.gitbooks.io/react-native/content/assets/android forth run.png)

代碼:https://github.com/zhiwehu/todo/tree/first


相關(guān)文章:

  1. React Native實(shí)戰(zhàn)開發(fā)1:搭建開發(fā)環(huán)境
  2. React Native實(shí)戰(zhàn)開發(fā)2:布局
  3. React Native實(shí)戰(zhàn)開發(fā)3:模塊劃分
  4. React Native實(shí)戰(zhàn)開發(fā)4:屬性和狀態(tài)
  5. React Native實(shí)戰(zhàn)開發(fā)5:使用TextInput
  6. React Native實(shí)戰(zhàn)開發(fā)6:使用ListView
  7. React Native實(shí)戰(zhàn)開發(fā)7:使用Switch更新todo complete狀態(tài)
  8. React Native實(shí)戰(zhàn)開發(fā)8: 刪除todo item
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塘秦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子动看,更是在濱河造成了極大的恐慌尊剔,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菱皆,死亡現(xiàn)場離奇詭異须误,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仇轻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門京痢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人篷店,你說我怎么就攤上這事祭椰。” “怎么了疲陕?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵方淤,是天一觀的道長。 經(jīng)常有香客問我蹄殃,道長携茂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任诅岩,我火速辦了婚禮讳苦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吩谦。我一直安慰自己鸳谜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布式廷。 她就那樣靜靜地躺著咐扭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上草描,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音策严,去河邊找鬼穗慕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛妻导,可吹牛的內(nèi)容都是我干的逛绵。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼倔韭,長吁一口氣:“原來是場噩夢啊……” “哼术浪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寿酌,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤胰苏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后醇疼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硕并,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年秧荆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倔毙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乙濒,死狀恐怖陕赃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颁股,我是刑警寧澤么库,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站豌蟋,受9級特大地震影響廊散,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜梧疲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一允睹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幌氮,春花似錦缭受、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春蔓搞,著一層夾襖步出監(jiān)牢的瞬間胰丁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工喂分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦庸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓蒲祈,卻偏偏與公主長得像甘萧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子梆掸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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