Nik*_*kos 5 android ios react-native
我希望有一个输入在用户输入时不断更新,然后失去焦点.反馈将是输入的边界.
1 Green: when valid
2 Amber: when typing and is in error state (Green when valid)
3 Red: when in error state and unfocused
4 Nothing: when input is pristine (not touched and empty)
Run Code Online (Sandbox Code Playgroud)
实现这一目标的最佳方法是什么?
理想情况下,这适用于iOS和Android.
TextInput有两个函数可用于实现此目的:
要在TextInput上动态设置样式,可以为bordercolor附加变量,如下所示:
<TextInput
onBlur={ () => this.onBlur() }
onChangeText={ (text) => this.onChange(text) }
style={{ borderColor: this.state.inputBorder, height: 70, backgroundColor: "#ededed", borderWidth: 1 }} />
Run Code Online (Sandbox Code Playgroud)
然后,通过正则表达式或模式匹配器传递onChangeText函数的结果,以实现您尝试实现的任何结果.
我在这里设置了一个工作项目,检查是否有空格,并抛出你想要的错误.您可以将其编辑并进行编辑,以更加具体地满足您的需求,但基本前提应该相同.我还将下面的代码放在实现该功能的工作项目中:
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
TextInput
} = React;
var SampleApp = React.createClass({
getInitialState: function() {
return {
inputBorder: '#eded',
defaultVal: ''
}
},
onBlur: function() {
console.log('this.state.defaultVal', this.state.defaultVal)
if(this.state.defaultVal.indexOf(' ') >= 0) {
this.setState({
inputBorder: 'red'
})
}
},
onChange: function(text) {
this.setState({
defaultVal: text
})
if(text.indexOf(' ') >= 0) {
this.setState({
inputBorder: '##FFC200'
})
} else {
this.setState({
inputBorder: 'green'
})
}
},
render: function() {
return (
<View style={styles.container}>
<View style={{marginTop:100}}>
<TextInput
onBlur={ () => this.onBlur() }
onChangeText={ (text) => this.onChange(text) }
style={{ height: 70, backgroundColor: "#ededed", borderWidth: 1, borderColor: this.state.inputBorder }} />
</View>
<View style={{marginTop:30}}>
<TextInput
style={{ height: 70, backgroundColor: "#ededed" }} />
</View>
</View>
);
}
});
var styles = StyleSheet.create({
container: {
flex: 1,
}
});
AppRegistry.registerComponent('SampleApp', () => SampleApp);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7579 次 |
| 最近记录: |