React Native之TextInput组件解析示例


Posted in Javascript onAugust 22, 2017

1 概述

TextInput组件和Text组件类似,内部都没有使用FlexBox布局,不同的是TextInput组件支持文字的输入,因为支持文字输入, TextInput组件要比Text组件多了一些属性和方法。TextInput组件支持Text组件所有的Style属性,而TextInput组件本身是没有特有的Style属性的。

2 属性

TextInput组件支持所有的View组件的属性,除此之外,它还有许多其他属性。

2.1 onChangeText

当输入框的内容发生变化时,就会调用onChangeText。

index.Android.js

import React, {Component} from 'react';
import {AppRegistry, StyleSheet, View, TextInput, Button,Alert} from 'react-native';
class TextApp extends Component {
  constructor(props) {
    super(props);
    this.state = {
      searchText: ""
    }
  }
  render() {
    return (
      <View style={styles.container}>
        <View style={styles.searchBar}>
          <TextInput style={styles.input} placeholder='请输入内容'
                onChangeText={(text) => {
                  this.setState({searchText: text});
                }}/>
          <Button style={styles.button} title='搜索'
              onPress={ () => {
                Alert.alert('输入的内容为:' + this.state.searchText);
              }
              }/>
        </View>
      </View>
    );
  }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  searchBar: {
    flexDirection: 'row',
    height: 45,
    justifyContent: 'center',
    alignItems: 'center'
  },
  input: {
    flex: 1,
    borderColor: 'gray'
  },
  button: {
    flex: 1
  }
});
AppRegistry.registerComponent('ViewSample', () => TextApp);

上面的例子我们用到了TextInput组件的onChangeText属性,当我们在TextInput中输入内容时,这个内容就会通过onChangeText的参数text传递回来,在onChangeText中将text的内容保存到state中。当我们点击Button时,通过Alert将state中保存的内容展现出来。

运行程序效果如下图所示。

React Native之TextInput组件解析示例

在输入框中输入android,点击搜索Button,可以看到输入的Android展示到了Alert中。

React Native之TextInput组件解析示例 

2.2 onChange

当输入框的内容发生变化时,也会调用onChange,只不过它所返回的参数是一个event,我们来改写2.1的代码:

...
 <TextInput style={styles.input} placeholder='请输入内容' keyboardType='default'
                onChange={(event) => {
                  this.setState({searchText: event.nativeEvent.text});
                }}/>
...

通过event.nativeEvent.text可以得到用户输入的内容,如果只是想要得到用户输入的内容,还是用onChangeText比较合适。

2.3 keyboardType

keyboardType用于设置弹出软键盘的类型。它的取值为范围为: enum(‘default', ‘email-address', ‘numeric', ‘phone-pad', ‘ascii-capable', ‘numbers-and-punctuation', ‘url', ‘number-pad', ‘name-phone-pad', ‘decimal-pad', ‘twitter', ‘web-search') ,其中default、numeric、email-address和phone-pad是跨平台。

...
 <TextInput style={styles.input} placeholder='请输入内容' keyboardType='phone-pad'
                onChangeText={(text) => {
                  this.setState({searchText: text}); 
                }}/>
...

将keyboardType的值设置为phone-pad,效果如下图所示。

React Native之TextInput组件解析示例

2.4 blurOnSubmit

如果blurOnSubmit值为true,文本框会在按下提交键时失去焦点。对于单行输入框,blurOnSubmit默认值为true,多行则为false。

在单行的情况下,点击键盘上的提交按钮时,TextInput的效果如下图所示。

React Native之TextInput组件解析示例  

将blurOnSubmit设置为false:

...
 <TextInput style={styles.input} placeholder='请输入内容' blurOnSubmit={false} 
                onChangeText={(text) => {
                  this.setState({searchText: text});
                }}/>
...

点击键盘上的提交按钮时,TextInput的效果如下图所示。

React Native之TextInput组件解析示例 

2.5 onSubmitEditing

当提交键被按下时会调用onSubmitEditing,如果multiline等于true,则此属性不可用。

...
 <TextInput style={styles.input} placeholder='请输入内容' blurOnSubmit={true} multiline={false}
                onChangeText={(text) => {
                  this.setState({searchText: text});
                }}
                onSubmitEditing={(event) => {
                  console.log(event.nativeEvent.text);
                }}
          />
...

运行程序并在App的开发菜单中选择Debug JS Remotely,这时我们输入Android并按下提交键,在Console控制台中就会输出结果。(笔者用的是WebStorm)

React Native之TextInput组件解析示例

2.6 returnKeyType

用于设置软键盘回车键的样式,Android平台可以使用returnKeyLabel来设置软键盘回车键的内容。

returnKeyType的取值为enum(‘done', ‘Go', ‘next', ‘search', ‘send', ‘none', ‘previous', ‘default', ‘emergency-call', ‘google', ‘join', ‘route', ‘yahoo')。

其中跨平台的取值有:done、next、search、send。

Android平台独有:none、previous。

iOS平台独有:default、emergency-call、google、join、route、yahoo。

如果我们将returnKeyType设置为go时,效果如下图所示。

React Native之TextInput组件解析示例

returnKeyType设置为send时,效果如下图所示。

 React Native之TextInput组件解析示例

2.7 其他跨平台属性

属性名 取值 说明
autoCapitalize enum(‘none', ‘sentences', ‘words', ‘characters') 设置英文字母自动大写规则,取值分别表示:不自动大写、每句话首字母自动大写、每个单词首字母大写、全部字母自动大写
autoCorrect bool 是否会自动检测用户输入的英语单词正确性,默认值为true
autoFocus bool 如果为true,在componentDidMount后会获得焦点。默认值为false。
defaultValue string 字符初始值,当用户开始输入时,该值将改变
placeholder node 文本输入之前将呈现的字符串,多用于提示用户应该输入什么
placeholderTextColor color 文本输入之前将呈现的字符串的颜色
editable bool 是否允许修改字符,默认值为true
maxLength number 最多允许用户输入多少字符
caretHidden bool 如果为true,则隐藏光标
multiline bool 如果为true,则文本输入可以是多行的,默认值为false
secureTextEntry bool 文本框是否用于输入密码,默认值为false
selectTextOnFocus bool 如果为true,则文本框获取焦点时,组件中的内容会被自动选中
onFocus function 当文本框获得焦点的时候调用此回调函数
onEndEditing function 当文本输入结束后调用此回调函数
onLayout function 当组件挂载或者布局变化的时候调用,参数为{x, y, width, height}
onScroll function 在内容滚动时持续调用,传回参数的格式形如{ nativeEvent: { contentOffset: { x, y } } }
onSelectionChange function 长按选择文本时,选择范围变化时调用此函数,传回参数的格式形如 { nativeEvent: { selection: { start, end } } }
value string 文本框中的文字内容

2.8 Android平台独有属性

属性名 取值 说明
inlineImageLeft string 指定一个图片放置在左侧
inlineImagePadding number 左侧图片的Padding(如果有的话),以及文本框本身的Padding
numberOfLines number TextInput的行数
underlineColorAndroid string TextInput的下划线颜色
returnKeyLabel string 设置软键盘回车键的内容,优先级高于returnKeyType
disableFullscreenUI bool 值为false时(默认值),如果TextInput的输入空间小,系统可能会进入全屏文本输入模式

2.9 iOS平台独有属性

属性名 取值 说明
clearButtonMode enum(‘never', ‘while-editing', ‘unless-editing', ‘always') 何时在文本框右侧显示清除按钮
clearTextOnFocus bool 如果为true,每次开始输入的时候都会清除文本框的内容
keyboardAppearance enum(‘default', ‘light', ‘dark') 键盘的颜色
onKeyPress function 一个键被按下的时候调用此回调,传递给回调函数的参数为{ nativeEvent: { key: keyValue } }
spellCheck bool 如果为false,则禁用拼写检查的样式(比如红色下划线)
enablesReturnKeyAutomatically bool 如果为true,键盘会在文本框内没有文字的时候禁用确认按钮 ,默认值为false

3 方法

clear()

clear用于清空输入框的内容。

想要使用组件的方法则需要使用组件的引用,例子如下所示。

...
render() {
    return (
      <View style={styles.container}>
        <View style={styles.searchBar}>
          <TextInput style={styles.input} ref="textInputRefer" placeholder='请输入内容' blurOnSubmit={true}
                returnKeyType='send'
                onChangeText={(text) => {
                  this.setState({searchText: text});
                }}
          />
          <Button style={styles.button} title='清除'
              onPress={ () => {
                this.refs.textInputRefer.clear();
              }
              }/>
        </View>
      </View>
    );
  }
 ...

在TextInput标签中定义引用的名称:ref="textInputRefer",这样我们通过 this.refs.textInputRefer就可以得到TextInput 组件的引用。在Button的onPress函数中,调用了TextInput的clear方法,这样当我们点击“清除”按钮时,文本框中的内容就会被清除。

isFocused(): boolean

返回值表明当前输入框是否获得了焦点。

好了,到这里TextInput组件就介绍到这里,还有一些没有列出的属性请查看官方文档。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用Json比用string返回数据更友好,也更面向对象一些
Sep 13 Javascript
jQuery学习笔记 获取jQuery对象
Sep 19 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
Jul 17 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
js文本框走动跑马灯效果代码分享
Aug 25 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
详解vue的数据binding绑定原理
Apr 12 Javascript
详解JavaScript事件循环机制
Sep 07 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
JS 验证码功能的三种实现方式
Nov 26 Javascript
生成无限制的微信小程序码的示例代码
Sep 20 Javascript
Vue filter 过滤器、以及在table中的使用介绍
Sep 07 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 #Javascript
浅谈箭头函数写法在ReactJs中的使用
Aug 22 #Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
Aug 22 #Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 #Javascript
关于JS与jQuery中的文档加载问题
Aug 22 #jQuery
bootstrap confirmation按钮提示组件使用详解
Aug 22 #Javascript
bootstrap multiselect下拉列表功能
Aug 22 #Javascript
You might like
德生PL550的电路分析
2021/03/02 无线电
我的群发邮件程序
2006/10/09 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
python使用fork实现守护进程的方法
2017/11/16 Python
Python中交换两个元素的实现方法
2018/06/29 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
Python类型转换的魔术方法详解
2020/12/23 Python
华润集团网上药店:健一网
2016/09/19 全球购物
伦敦哈德森鞋:Hudson Shoes
2018/02/06 全球购物
购买一个高级域名:BuyDomains
2018/03/11 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
学习自我鉴定
2014/02/01 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
学院党委班子四风问题自查报告及整改措施
2014/10/25 职场文书
小学大队委竞选口号
2015/12/25 职场文书
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android