Input
- category: UI
- chinese: 输入框
- type: UI 组件
设计思路
Input 是页面输入框的封装,其中 multiple = true 时为多行文本,类似 web 端的 textarea 组件。
Input type 不同,在端内有不同类型的键盘表现。
Nuke 的 Input 组件可以通过 materialDesign = true 开启 android material design 模式。
API
属性配置 | 说明 | 类型 | 默认值 |
---|---|---|---|
type | 键盘类型,可选 text url password tel date time email number |
string | text |
autoFocus | 自动获得焦点 | boolean | false |
multiple | 是否为多行,不选则为单行 | bool | false |
value | 当前的 value 值 | string | |
maxLength | 最长字数 | number | |
defaultValue | 初始化的 value 值(非受控用法) | string | |
disabled | 状态 设置文本域禁用状态 | boolean | false |
onInput | 输入事件 | function(e) |
false |
onFocus | Focus 事件 | function |
false |
onBlur | Blur 事件 | function |
false |
onChange | change | function(value, e) |
|
onReturn | 仅 native 有效,return 事件,用户在手机上点击了 return 键触发(键盘右下角),返回值 e {returnKeyType:'类型',value:'输入框的值'} | function(e) |
false |
returnKeyType | 仅 native 有效,return 键展示类型(键盘右下角的那个键),可选 default go next search send done |
string | default |
focus 实例方法 | 让 input 获得焦点 | function |
|
blur 实例方法 | 让 input 失去焦点 | function |
|
getValue 实例方法 | 获取输入框的值 | function |
|
rows | 多行 input 中可同时显示的行数 | number | 2 |
placeholder | placeholder 文本 | string | 无 |
placeholderColor | placeholder 颜色,仅 native 有效 | string | '#999999' |
status | 状态,可枚举"success","error",如果是 error,会有 error 样式 | string | success |
errorMessage | 错误信息,配合 status error 使用 | string | 无 |
renderCount | 是否显示字数统计,如果开启,必须要设置 maxLength | boolean | false |
hasClear | 是否渲染清除按钮 | boolean | false |
onClear | 清除按钮点击事件 | function |
|
fixedFont | 字体大小是否随屏幕缩放 | boolean | false |
materialDesign | 是否开启 md 模式 | boolean | false |
floatPlaceholder | 仅 md 模式下有效,placeholder 是否固定。若不固定,输入时将自动上浮(md 交互效果)。如果固定 placeholder 不动,顶部预留的间隙将被移除。默认自动上浮。 | boolean | true |
hideErrorWhenFocus | 是否在 focus 状态隐藏错误。 | boolean | true |
关于 defaultValue 与 value (非受控与受控的差别)
- defaultValue : 传入 value 默认值,用于 constructor 中计算使用,生命周期函数改变也不会再改变。
<Input defaultValue="羊绒大衣" onChange= { console; }/>
- value: 受控用法,会随着生命周期函数改变而改变。
<Input value=thisstatevalue onChange= { console; }/>
实例方法
focus
和blur
//在某些情况下需要让 myinput 强制失去焦点 { thisinputwrappedInstance; } { thisinputwrappedInstance; } { console;//强制失去焦点后,会触发 onCchange } { return <View> <Input ref={thisinput = n;} onChange=thischange/> <Button type="primary" onPress=thisfocus>点我让input获得焦点</Button> <Button type="primary" onPress=thisblur>失去焦点,获取输入内容</Button> </View> }
-
getValue
获取当前输入框值//在某些情况下需要让 myinput 强制失去焦点{let inputValue = thisinputwrappedInstance;//xxx}{return<View><Input ref={thisinput = n;} /><Button type="primary" onPress=thissubmitForm>提交表单</Button></View>}
Demo
- 非 md 模式
<Input materialDesign=false hasClear=true defaultValue='WATSON$7189833' onInput=thischeckLength status=thisstatestatus1 hasWarningIcon=true type="text" onChange=thischange placeholder="Enter Voucher Code" errorMessage='Voucher code error'/>
- md 模式
// materialDesign = true 或 外层包裹 Styleprovider 都可以实现开启 md 的目的<Input materialDesign=true hasWarningIcon=true defaultValue='WATSON$7189833' status='error' type="text" onChange=thischange placeholder="Enter Voucher Code" errorMessage='Voucher code error'/>
其他
- bug、建议联系 @翊晨
- 钉钉交流群