[关闭]
@yzzer 2020-05-20T18:23:09.000000Z 字数 3084 阅读 387

React Native 输入组件 TextInput

输入组件 TextInput 就是让用户输入数据的,比如输入登录有户名,输入登录密码。

除了简单的单行输入框外,还可以用于输入大量的文本,比如输入用户反馈,输入用户说明等等。

可以说,React Native 中的输入组件 TextInputHTML 中的 的结合体。

React Native - 输入组件 TextInput

TextInput 组件是 React Native 的内置组件,不需要做额外的安装

引入组件

要使用输入组件 TextInput,必须先引入

  1. import { TextInput } from 'react-native'

使用语法

输入组件 TextInput 是一个可视组件,使用语法如下

  1. <TextInput
  2. style = {styles}
  3. underlineColorAndroid = "{transparent|"
  4. placeholder = "Email"
  5. placeholderTextColor = "{#9a73ef}"
  6. numberOfLines={1}
  7. editable={true|false}
  8. keyboardType={"default"|"number-pad"|"decimal-pad"|
  9. "numeric"|"email-address"|"phone-pad"}
  10. secureTextEntry={true|false}
  11. multiline={true|false}
  12. returnKeyType = {"done"|"go"|"next"|"search"|"send"}
  13. autoCapitalize = "none"
  14. onChangeText = {function(text){}}/>

看起来属性有点多,我们挑几个通用的常用的做个介绍

属性 类型 说明
style style 用于定制组件的样式
underlineColorAndroid color Android 中下划线的颜色,透明则为 transparent
placeholder string 占位符
placeholderTextColor color 占位符的颜色
multiline bool 是否多行,默认为单行
numberOfLines number 设置了 multiline 后要设置的行数
editable bool 是否可编辑
keyboardType string 键盘类型,可选的值有 "default","number-pad","decimal-pad", "numeric","email-address","phone-pad"
secureTextEntry bool 是否属于密码框类型
returnKeyType string 键盘上的返回键类型,可选的值有 "done","go","next","search","send"
autoCapitalize string 字母大写模式,可选的值有:'none', 'sentences', 'words', 'characters'
onChangeText function 文本变更后的回调函数,参数为输入框里的文本

注意

使用 multiline={true}numberOfLines={5} 可以设置输入框为多行模式,但它并不会在外观上显示为多行,需要设置样式属性 height 才会显示为多行。
除了onChangeText以外还有一个onEndEditing,表示编辑完之后发生的事件,但是这时候如果需要获取文本,应该用item.nativeEvent.text

范例

下面我们使用输入组件 TextInput 实现几个常见的输入框,比如用户名输入框、密码输入框、文本描述输入框。

App.js

  1. import React, { Component } from 'react'
  2. import { View, Text, TouchableOpacity, TextInput, StyleSheet } from 'react-native'
  3. class Inputs extends Component {
  4. state = {
  5. email: '',
  6. password: '',
  7. intro:'',
  8. }
  9. handleEmail = (text) => {
  10. this.setState({ email: text })
  11. }
  12. handlePassword = (text) => {
  13. this.setState({ password: text })
  14. }
  15. handleIntro = (text) => {
  16. this.setState({ intro: text })
  17. }
  18. register = (email, pass,intro) => {
  19. alert('email: ' + email + '\npassword: ' + pass + "\nintro:" + intro)
  20. }
  21. render() {
  22. return (
  23. <View style = {styles.container}>
  24. <TextInput
  25. style = {styles.input}
  26. underlineColorAndroid = "transparent"
  27. placeholder = "请输入邮箱"
  28. placeholderTextColor = "#ccc"
  29. autoCapitalize = "none"
  30. keyboardType = "email-address"
  31. returnKeyType = "next"
  32. onChangeText = {this.handleEmail}/>
  33. <TextInput
  34. style = {styles.input}
  35. underlineColorAndroid = "transparent"
  36. placeholder = "请输入密码"
  37. placeholderTextColor = "#ccc"
  38. autoCapitalize = "none"
  39. returnKeyType = "next"
  40. secureTextEntry = {true}
  41. onChangeText = {this.handlePassword}/>
  42. <TextInput
  43. style = {[styles.input,{height:100}]}
  44. underlineColorAndroid = "transparent"
  45. placeholder = "请输入描述"
  46. placeholderTextColor = "#ccc"
  47. autoCapitalize = "none"
  48. multiline = {true}
  49. numberOfLines = {4}
  50. textAlignVertical="top"
  51. returnKeyType="done"
  52. onChangeText = {this.handleIntro}/>
  53. <TouchableOpacity
  54. style = {styles.submitButton}
  55. onPress = {
  56. () => this.register(this.state.email, this.state.password)
  57. }>
  58. <Text style = {styles.submitButtonText}>注册</Text>
  59. </TouchableOpacity>
  60. </View>
  61. )
  62. }
  63. }
  64. export default Inputs
  65. const styles = StyleSheet.create({
  66. container: {
  67. paddingTop: 23
  68. },
  69. input: {
  70. margin: 15,
  71. paddingLeft:8,
  72. height: 40,
  73. borderColor: '#eeeeee',
  74. borderWidth: 1
  75. },
  76. submitButton: {
  77. backgroundColor: '#7a42f4',
  78. padding: 10,
  79. alignItems:'center',
  80. margin: 15,
  81. height: 40,
  82. },
  83. submitButtonText:{
  84. color: 'white'
  85. }
  86. })

演示

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注