我不确定何时在onChange
组件中使用onChangeText
vs TextInput
。我知道onChangeText
接受更改的文本作为回调中的arg,但这就是为什么你要使用onChangeText
,因为你可以在回调中更新状态?
答案 0 :(得分:64)
onChangeText
基本上是onChange
的简化版本,因此您可以轻松使用它,而无需通过event.target.value
来获取更改后的价值。
那么,您应该何时使用onChange
以及onChangeText
何时使用?
如果您的文字输入很简单,或逻辑很简单,那么您可以立即使用onChangeText
<TextInput value={this.state.name} onChangeText={(text) => this.setState({name: text})}>
如果您有更复杂的表单和/或您在处理数据时有更多逻辑(例如处理文本与数字不同)当用户更改输入时,您最好使用onChange
,因为它为您提供了更多灵活性。例如:
handleChange(event) {
const {name, type, value} = event.nativeEvent;
let processedData = value;
if(type==='text') {
processedData = value.toUpperCase();
} else if (type==='number') {
processedData = value * 2;
}
this.setState({[name]: processedData})
}
<TextInput name="username" type="text" value={this.state.username} onChange={this.handleChange}}>
<TextInput name="password" type="number" value={this.state.password} onChange={this.handleChange}}>
答案 1 :(得分:0)
像这样使用它:
<Input label='First Name' onChange={this.onChange} value={this.state.first}/>
onChange = (event) => {
const {eventCount, target, text} = event.nativeEvent;
this.setState({first:text});
};
target
属性似乎没有用。您似乎无法将数据属性附加到react-native元素并像在react中那样从目标元素检索它们,因为该应用程序不是浏览器。
通过React,我们被告知,出于性能原因,最好不将内联函数附加到onChange事件上。我们应该在HTML元素上使用自定义props或data- *属性,并从onChange处理程序内的 e.target 中检索信息。
但是使用react-native,似乎这种传递数据的格式实际上是可以接受的:
<Input
label='First Name'
onChangeText={text=>this.onChange('first',text,'anotherValueIWantToPass')}
value={this.state.first}/>