React-Native中一些組件的用法(一)

個人博客搭建完成,歡迎大家來訪問哦
黎默丶lymoo的博客

本文為大家介紹一下React-Native中一些常用的組件,由于對ES6的語法并沒有完全掌握,這里暫時用ES5和ES6混用的語法。

View組件

View是一個支持Flexbox布局、樣式、一些觸摸處理、和一些無障礙功能的容器,并且它可以放到其它的視圖里,也可以有任意多個任意類型的子視圖。
View的設計初衷是和StyleSheet搭配使用,這樣可以使代碼更清晰并且獲得更高的性能。盡管內聯樣式也同樣可以使用。

View的常用樣式設置

flex布局樣式
backgroundColor:背景顏色
borderColor:邊框顏色
borderWidth:邊框大小
borderRadius:圓角

以手機端攜程官網為示例

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View
} from 'react-native';
var ViewTest = React.createClass({
    render () {
        return (
            <View style={styles.container}>
                <View style={[styles.flex, styles.center]}>
                    <Text style={styles.white}>酒店</Text>
                </View>
                <View style={styles.flex}>
                    <View style={[styles.flex, styles.leftRightLine, styles.bottomLine, styles.center]}>
                        <Text style={styles.white}>海外酒店</Text>
                    </View>
                    <View style={[styles.flex, styles.leftRightLine, styles.center]}>
                        <Text style={styles.white}>特價酒店</Text>
                    </View>
                </View>
                <View style={styles.flex}>
                    <View style={[styles.flex, styles.bottomLine, styles.center]}>
                        <Text style={styles.white}>團購</Text>
                    </View>
                    <View style={[styles.flex, styles.center]}>
                        <Text style={styles.white}>民宿?客棧</Text>
                    </View>
                </View>
            </View>
        )
    }
});
var styles = StyleSheet.create({
    container: {
        margin: 10,
        marginTop: 25,
        height: 75,
        flexDirection: "row",
        backgroundColor: "#ff607c",
        borderRadius: 5
    },
    flex: {
        flex: 1
    },
    white: {
        color: "white",
        fontWeight: "900",
        textShadowColor: "#ccc",
        textShadowOffset: {width: 1, height: 1}
    },
    center: {
        justifyContent: "center",
        alignItems: "center"
    },
    leftRightLine: {
        borderLeftWidth: 1,
        borderRightWidth: 1,
        borderColor: "white"
    },
    bottomLine: {
        borderBottomWidth: 1,
        borderColor: "white"
    }
});
AppRegistry.registerComponent('HelloReact', () => ViewTest);

最后效果:
View組件效果圖

Text組件

一個用于顯示文本的React組件,并且它也支持嵌套、樣式,以及觸摸處理。

常用特性

onPress:手指觸摸事件
numberOfLines :顯示多少行

常用樣式設置

color:字體顏色
fontSize:字體大小
fontWeight:字體加粗
textAlign:對齊方式

以手機端網易新聞為示例

創建header.js和news.js兩個文件
header.js具體代碼如下:

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View
} from 'react-native';
var Header = React.createClass({
   render () {
       return (
           <View style={styles.container}>
               <Text style={styles.font}>
                   <Text style={styles.red}>網易</Text>
                   <Text style={styles.white}>新聞</Text>
                   <Text>有態度</Text>
               </Text>
           </View>
       )
   }
});
var styles = StyleSheet.create({
    container: {
        marginTop: 25,
        height: 44,
        alignItems: "center",
        justifyContent: "center",
        borderBottomWidth: 1,
        borderColor: "red"
    },
    font: {
        fontSize: 25,
        fontWeight: "bold"
    },
    red: {
        color: "red"
    },
    white: {
        color: "white",
        backgroundColor: "red"
    }
});
module.exports = Header;

news.js具體代碼如下:

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View
} from 'react-native';
var News = React.createClass({
    render () {
        var content = this.props.content;
        var newList = [];
        for (var i in content) {
            var text = <Text key={i} style={styles.font}>{content[i]}</Text>;
            newList.push(text);
        }
        return (
            <View style={styles.container}>
                <Text style={styles.title}>今日要聞</Text>
                <View style={styles.container}>
                    {newList}
                </View>
            </View>
        )
    }
});
var styles = StyleSheet.create({
    container: {
        margin: 10
    },
    title: {
        color: "red",
        fontSize: 18,
        fontWeight: "bold"
    },
    font: {
        fontSize: 14,
        lineHeight: 35,
        fontWeight: "normal"
    }
});
module.exports = News;

最后在index.ios.js文件中修改代碼為:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
var content = [
    '1、新華社用"罕見"為里皮點贊:他是國足的不二選擇',
    '2、干部動員拆遷遭襲身亡 是否同意拆除雙方說法不',
    '3、母親欠債遭11人凌辱 兒子目睹后刺死1人被判無期',
    '4、美媒:美轟炸機進入中國東海防空識別區遭中方警告'
];
var Header = require("./header");
var News = require("./news");
var NewsNote = React.createClass({
    render () {
        return (
            <View>
                <Header></Header>
                <News content={content}></News>
            </View>
        )
    }
});
AppRegistry.registerComponent('WorkA', () => NewsNote);

最后效果:
Text復合組件效果圖

Touchable類組件

該組件用于封裝視圖,使其可以正確響應觸摸操作

常用樣式設置

TouchableOpcity:透明觸摸,點擊時,組件會出現透明過度效果。
TouchableHighlight:高亮觸摸,點擊時組件會出現高亮效果。
TouchableWithoutFeedback:無反饋觸摸,點擊時候,組件無視覺變化。

示例

創建一個touchable.js的文件
里面代碼為:

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    TouchableOpacity,
    TouchableHighlight,
    TouchableWithoutFeedback
} from 'react-native';
var Touchable = React.createClass({
    getInitialState () {
        return {times: 0}
    },
    handlePress () {
        var sum = this.state.times;
        sum++;
        this.setState({times: sum});
    },
    render () {
        return (
            <View>
                <TouchableOpacity style={styles.btn} onPress={this.handlePress}>
                    <Text style={styles.text}>TouchableOpacity</Text>
                </TouchableOpacity>
                <TouchableHighlight underlayColor={"red"} onPress={this.handlePress} style={styles.btn}>
                    <Text style={styles.text}>TouchableHighlight</Text>
                </TouchableHighlight>
                <TouchableWithoutFeedback onPress={this.handlePress}>
                    <View style={[styles.btn, {width: 210}]}>
                        <Text style={styles.text}>TouchableWithoutFeedback</Text>
                    </View>
                </TouchableWithoutFeedback>
                <Text style={styles.text2}>點了{this.state.times}次</Text>
            </View>
        )
    }
});
var styles = StyleSheet.create({
    btn: {
        marginTop: 25,
        marginLeft: 20,
        width: 150,
        height: 30,
        backgroundColor: "cyan",
        borderRadius: 3,
        justifyContent: "center",
        alignItems: "center"
    },
    text: {
        fontSize: 14,
        fontWeight: "bold",
        color: "blue"
    },
    text2: {
        marginLeft: 25,
        marginTop: 25,
        fontSize: 16
    }
});
module.exports = Touchable;

在index.ios.js文件中代碼更改為:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
var Touchable = require("./touchable");
var TouchableTest = React.createClass({
    render () {
      return (
          <View>
            <Touchable></Touchable>
          </View>
      )
    }
});
AppRegistry.registerComponent('useComponent', () => TouchableTest);

最后效果:
Touchable組件效果圖

圖片轉換成gif圖可能會失去一些效果,點擊TouchableOpacity按鈕會變透明,點擊TouchableHighlight按鈕的背景顏色會改變,點擊TouchableWithoutFeedback按鈕沒有任何變化

TextInput組件

TextInput是一個允許用戶在應用中通過鍵盤輸入文本的基本組件。本組件的屬性提供了多種特性的配置,譬如自動完成、自動大小寫、占位文字,以及多種不同的鍵盤類型(如純數字鍵盤)等等。

常用屬性

placeholder占位符;
value 輸入框的值;
password 是否密文輸入;
editable 輸入框是否可編輯
returnkeyType 鍵盤return鍵類型;
onChange 當文本變化時候調用;
onEndEditing 當結束編輯時調用;
onSubmitEding 當結束編輯提交按鈕時候調動;
onChangeText:讀取TextInput的用戶輸入;

示例

創建一個input.js的文件
里面代碼為:

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    TextInput
} from 'react-native';
var Input = React.createClass({
    getInitialState () {
        return {text: ""}
    },
    changeText (text) {
        this.setState({text: text});
    },
    render () {
        return (
            <View style={styles.container}>
                <TextInput returnKeyType={"done"} style={styles.input} placeholder={"請輸入"} onChangeText={this.changeText}/>
                <Text style={styles.text}>{this.state.text}</Text>
            </View>
        )
    }
});
var styles = StyleSheet.create({
    container: {
        marginTop: 25
    },
    input: {
        margin: 25,
        height: 35,
        borderWidth: 1,
        borderColor: "red"
    },
    text: {
        marginLeft: 35,
        marginTop: 10,
        fontSize: 16
    }
});
module.exports = Input;

在index.ios.js文件中代碼更改為:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
var Input = require("./input");
var InputTest = React.createClass({
    render () {
      return (
          <View>
            <Input/>
          </View>
      )
    }
});
AppRegistry.registerComponent('useComponent', () => InputTest);

最后效果:
Input組件效果圖

Image組件

一個用于顯示多種不同類型圖片的React組件,包括網絡圖片、靜態資源、臨時的本地圖片、以及本地磁盤上的圖片(如相冊)等。

靜態圖片加載

直接引入,代碼如下:<Image source={require(‘./my-icon.png’)} />

網絡圖片加載

注意:網絡圖片請求http請求的xcode需要做一個設置info.plist里的Allow Arbitrary Loads后面的no改成yes。
通過source指定圖片地址,代碼如下:<Image source=(注意這里要雙花括號,因為特殊原因只能顯示單花括號){uri: ‘https://facebook.github.io/react/img/logo_og.png’}(注意這里要雙花括號,因為特殊原因只能顯示單花括號)/>

示例

創建一個image.js的文件,在保存一張圖片至本地,這里為1.png
里面代碼為:

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Image
} from 'react-native';
var ImageTest = React.createClass({
    render () {
        return (
            <View style={styles.container}>
                <View style={styles.common}>
                    <Image source={{uri:"http://i1.sanwen8.cn/doc/1609/852-160912105Q2I6.jpg"}}  style={styles.netImg}></Image>
                </View>
                <View style={styles.common}>
                    <Image source={require("./1.png")} style={styles.localImg}></Image>
                </View>
            </View>
        )
    }
});
var styles = StyleSheet.create({
    container: {
        margin: 10,
        marginTop: 25,
        alignItems: "center"
    },
    common: {
        width: 280,
        height: 250,
        backgroundColor: "cyan",
        justifyContent: "center",
        alignItems: "center",
        marginBottom: 10
    },
    netImg: {
        width: 280,
        height: 220
    },
    localImg: {
        width: 200,
        height: 200
    }
});
module.exports = ImageTest;

在index.ios.js文件中代碼更改為:

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
var ImageComponent = require("./image");
var ImageTest = React.createClass({
    render () {
      return (
          <View>
            <ImageComponent/>
          </View>
      )
    }
});
AppRegistry.registerComponent('useComponent', () => ImageTest);

最后效果:
Image組件效果圖

原文鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,720評論 25 708
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,170評論 4 61
  • 前端時間在mac下研究safair和chrome下的插件,被虐的死去活來的,真是虐我千百遍,我只待他如初戀啊!因為...
    往南渡閱讀 1,142評論 0 1
  • 盡管我們不知道你現在做得對不對,但我們永遠都會站在你身后?!焙蜕向v娛樂解約,張杰面臨的是對方高額的賠償要求,除了需...
    橙色小蘑菇閱讀 313評論 0 8
  • 來到這個城市上大學第二年了,從剛開始的興奮到現在的淡漠,剛來的時候滿懷憧憬,一年下來卻沒處下一個值得交心的朋友,...
    L活在當下閱讀 275評論 0 1