react-native 常用组件(一)

1.Picker组件 [说明:在ios和android渲染原生的选择器.]
属性:
onValueChange某一项被选中时执行此回调,调用时带有的参数:

  • itemValue:被选中项的value属性
  • itemPosition:被选中项在picker中的索引位置

selectedValue默认选中的值。可以是字符串或整数
style
testID用于在端对端测试中定位此视图。
enabled如果设为false,则会禁用此选择器。【只适用Android】
mode在Android上,可以指定在用户点击选择器时,以怎样的形式呈现选项:【只适用Android】

  • dialog: 显示一个模态对话框。默认选项。
  • dropdown: 以选择器所在位置为锚点展开一个下拉框。

prompt设置选择器的提示字符串。在Android的对话框模式中用作对话框的标题。【只适用Android】
itemStyle指定应用在每项标签上的样式。【只适用IOS】
栗子:

<Picker
                    selectedValue={this.state.language}
                    style={{ height: 50, width: 100 }}
                    enabled={true}
                    mode='dropdown'
                    onValueChange={(itemValue, itemIndex) => this.setState({language: itemValue})}>
                    <Picker.Item label="Java" value="java" />
                    <Picker.Item label="JavaScript" value="js" />
                </Picker>

2.Slider组件[说明:用于选择一个范围值的组件。]
style
disabled如果为true,用户就不能移动滑块。默认为false。
maximumValue滑块的最大值(当滑块滑到最右端时表示的值)。默认为1。
minimumTrackTintColor滑块左侧轨道的颜色。在iOS上默认为一个蓝色的渐变色。
minimumValue滑块的最小值(当滑块滑到最左端时表示的值)。默认为0。
onSlidingComplete用户松开滑块的时候调用此回调,无论值是否变化。回调值为当前值。
onValueChange在用户拖动滑块的过程中不断调用此回调。
step滑块的步长(拖动变化的最小单元)。这个值应该在0到(maximumValue - minimumValue)之间。默认值为0。
maximumTrackTintColor滑块右侧轨道的颜色。在iOS上默认为一个灰色的渐变色。
value滑块的初始值。这个值应该在最小值和最大值之间。默认值是0。
thumbTintColorColor of the foreground switch grip. 【只适用android】
maximumTrackImage指定一个滑块右侧轨道背景图。仅支持静态图片。图片最左边的像素会被平铺直至填满右侧轨道。【只适用ios】
minimumTrackImage指定一个滑块左侧轨道背景图。仅支持静态图片。图片最右边的像素会被平铺直至填满左侧轨道。【只适用ios】
thumbImage给滑块设置一张图片。只支持静态图片。【只适用ios】
trackImage给轨道设置一张背景图。只支持静态图片。图片最中央的像素会被平铺直至填满轨道。【只适用ios】
栗子:

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

export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            value: 20
        }
    }
    render() {
        return (
            <View style={{marginTop: 22}}>
                <Slider style={{
                    width: 280,
                    marginTop: 20
                }}
                        minimumValue={0}
                        maximumValue={100}
                        value={this.state.value}
                        disabled={false}
                        minimumTrackTintColor="red"
                        maximumTrackTintColor="blue"
                        step={10}
                        onValueChange={(value) => {
                            this.setState({value: value})
                        }}/>
                <Text style={{marginTop: 20}}>
                    当前选择的value:{this.state.value}
                </Text>
            </View>
        );
    }
}

3.Switch组件[跨平台通用的“开关”组件。]
disabled如果为true则禁用此组件的交互。
trackColor开启状态时的背景颜色。
ios_backgroundColor在iOS中,自定义背景颜色。当切换值为false或禁用切换(且切换为半透明)时,可以看到此背景色。
onValueChange当值改变的时候调用此回调函数,参数为新的值。
thumbColor开关上圆形按钮的背景颜色。在iOS上设置此颜色会丢失按钮的投影。
tintColor关闭状态时的边框颜色(iOS)或背景颜色(Android)。【tintColor已被弃用,使用trackColor代替。】
value表示此开关是否打开。默认为false(关闭状态)。
栗子:

import React, {Component} from "react";
import {View, Switch} from "react-native";
export default class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            falseSwitchIsOn: false
        }
    }
    render() {
        return (
            <View style={{marginTop: 22}}>
                <Switch
                    disabled={false}
                    thumbColor='red'
                    // 开关上圆形按钮的背景颜色。在iOS上设置此颜色会丢失按钮的投影。
                    onValueChange={(value) => this.setState({falseSwitchIsOn: value})}
                    style={{marginBottom:10,marginTop:10}}
                    value={this.state.falseSwitchIsOn} />

            </View>
        );
    }
}

4.ActivityIndicator组件[说明:显示一个圆形的 loading 提示符号。]
属性:
animating是否要显示指示器动画,默认为 true 表示显示,false 则隐藏。
color滚轮的前景颜色(默认为灰色)。
size指示器的大小,默认为'small'。目前只能在 Android 上设定具体的数值。
hidesWhenStopped在animating为 false 的时候,是否要隐藏指示器(默认为 true)。如果animating和hidesWhenStopped都为 false,则显示一个静止的指示器。【只适用ios】
栗子:

 <ActivityIndicator      
                  animating={false}
                  hidesWhenStopped={false}
                  // 只使用ios平台
                  size="large"
                  color="#0000ff"/>

5.Alert组件[说明:启动一个提示对话框,包含对应的标题和信息。]
注:在 iOS 上你可以指定任意数量的按钮。每个按钮还都可以指定自己的样式,此外还可以指定提示的类别。
在 Android 上最多能指定三个按钮,这三个按钮分别具有“中间态”、“消极态”和“积极态”的概念:
如果你只指定一个按钮,则它具有“积极态”的属性(比如“确定”);两个按钮,则分别是“消极态”和“积极态”(比如“取消”和“确定”);三个按钮则意味着“中间态”、“消极态”和“积极态”(比如“稍候再说”,“取消”,“确定”)。在 Android 上默认情况下点击提示框的外面会自动取消提示框。你可以提供一个额外参数来处理这一事件:{ onDismiss: () => {} }。还有另外一个参数也可以用来阻止提示框被自动取消,即{ cancelable: false }。
alert() 方法:
static alert(title, message?, buttons?, options?, type?)
栗子:

import React, {Component} from "react";
import {View, Text, StyleSheet,TouchableOpacity,Alert} from "react-native";
export default class App extends Component {
    render() {
        return (
            <View style={[styles.container, styles.horizontal]}>
                <TouchableOpacity onPress={()=>{
                    Alert.alert(
                        'Alert Title',
                        'My Alert Msg',
                        [
                            {text: '稍等', onPress: () => console.log('Ask me later pressed')},
                            {text: '取消', onPress: () => console.log('Cancel Pressed'), style: 'cancel'},
                            {text: '確定', onPress: () => console.log('OK')},
                        ],
                        { cancelable: false }
                        //用来阻止提示框被自动取消
                    )
                }}>
                    <Text>点击</Text>
                </TouchableOpacity>
            </View>
        );
    }
}
const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center'
    },
    horizontal: {
        flexDirection: 'row',
        justifyContent: 'space-around',
        padding: 10
    }
})

6.Platform模块
React Native 提供了两种方法来区分平台:

第一种方法:
import { Platform, StyleSheet } from "react-native";
const styles = StyleSheet.create({
  height: Platform.OS === "ios" ? 200 : 100
});
//或者:
import { Platform, StyleSheet } from "react-native";
const styles = StyleSheet.create({
  container: {
    flex: 1,
    ...Platform.select({
      ios: {
        backgroundColor: "red"
      },
      android: {
        backgroundColor: "blue"
      }
    })
  }
});
这一方法可以接受任何合法类型的参数,因此你也可以直接用它针对不同平台返回不同的组件,像下面这样:
const Component = Platform.select({
  ios: () => require("ComponentIOS"),
  android: () => require("ComponentAndroid")
})();

<Component />;

第二种方法:特定平台扩展名
当不同平台的代码逻辑较为复杂时,最好是放到不同的文件里,这时候我们可以使用特定平台扩展名。React Native 会检测某个文件是否
具有.ios.或是.android.的扩展名,然后根据当前运行的平台自动加载正确对应的文件。比如:BigButton.ios.js    BigButton.android.js
React Native 会根据运行平台的不同自动引入正确对应的组件。

检查平台版本:Platform.Version
在android上,version 属性是一个数字;
在 iOS 上,Version属性是-[UIDevice systemVersion]的返回值,具体形式为一个表示当前系统版本的字符串。
7.KeyboardAvoidingView组件[解决手机上弹出的键盘常常会挡住当前的视图问题]
属性:
keyboardVerticalOffset有时候应用离屏幕顶部还有一些距离(比如状态栏等等),利用此属性来补偿修正这段距离。
behavior
contentContainerStyle如果设定 behavior 值为'position',则会生成一个 View 作为内容容器。此属性用于指定此内容容器的样式。
enabled是否启用KeyboardAvoidingView。默认为true。

  <KeyboardAvoidingView style={styles.container}>
                    <TextInput
                        underlineColorAndroid={'#ffffff'}
                        placeholder="这里是一个简单的输入框"
                        style={styles.textInput} />
                </KeyboardAvoidingView>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容