ReactNative TextInput' onChangeText 未被调用
ReactNative TextInput' onChangeText is not called
我希望 onTextChange
在我通过状态更改为其设置文本时被触发。我正在构建我的屏幕数字键盘以输入 PIN 码,我想在用户按下这些键时捕获 TextInput
上的文本更改。
this.setState({text})
我的 TextInput
看起来像这样:
<TextInput
editable={false}
onChangeText={text => Alert.alert(text)}
secureTextEntry={true}
value={this.state.text}
更新: 我发现了某种相关的问题,但也没有答案:TextInput not working as expected when programmatically entering text
您将 editable
属性设置为 false
那么 TextInput
的文本将永远不会改变并且 onChangeText
将永远不会调用...
您可以像下面这样使用它。
class MyComponent extends Component{
constructor(props){
super(props)
this.state = { text: null } //By default it will be null.
this._handleChange = this._handleChange.bind(this) //You need to bind your function here.
}
_handleChange(e) {
const { name, value } = e.target; //it will destructure your name and value where ever you are using _handleChange method.
this.setState({
[name]: value // here we are setting the state dynamically.
});
alert(value)
}
render() {
return(
<View>
<TextInput
editable={true}
onChangeText={this._handleChange} // this will call _handleChange method.
secureTextEntry={true}
value={this.state.text}/>
</View>
)
}
}
此代码可能对您有所帮助:
this.state = {Alert.alert(
'Update available //your Title',
'Keep your app up to date to enjoy the latest
features //your Message',
[
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel',
}
]
)
}
<TextInput
editable={false}
onChangeText={text => Alert.alert(text)}
secureTextEntry={true}
value={this.state.text}
/>
我最终使用了 onContentSizeChange
,它会在文本更改时被调用。我确实发现,当以编程方式设置文本时,某些 TextInput 方法无法正常工作。
我认为 onChangeText 的事件处理函数是异步的,因此您应该使用 async/await
<Input onChangeText={(val) => { this.changeHandler(val) }} />
并且更改处理程序方法应该是
changeHandler = async (val) =>{
await this.setState({
[someKey]: val
})
.
.
.
do other stuff that depends on val
}
它以前用于发出 http 请求,该请求在输入值更改时触发,并使用输入值。
因为你没有绑定:
onChangeText={text => Alert.alert(text)}
应该改变:
onChangeText={this.changeFunction.bind(this)}
然后添加一个功能:
changeFunction(text){
alert(text);
}
=> 你可以测试,如果它不起作用,请投票给我:)
我希望 onTextChange
在我通过状态更改为其设置文本时被触发。我正在构建我的屏幕数字键盘以输入 PIN 码,我想在用户按下这些键时捕获 TextInput
上的文本更改。
this.setState({text})
我的 TextInput
看起来像这样:
<TextInput
editable={false}
onChangeText={text => Alert.alert(text)}
secureTextEntry={true}
value={this.state.text}
更新: 我发现了某种相关的问题,但也没有答案:TextInput not working as expected when programmatically entering text
您将 editable
属性设置为 false
那么 TextInput
的文本将永远不会改变并且 onChangeText
将永远不会调用...
您可以像下面这样使用它。
class MyComponent extends Component{
constructor(props){
super(props)
this.state = { text: null } //By default it will be null.
this._handleChange = this._handleChange.bind(this) //You need to bind your function here.
}
_handleChange(e) {
const { name, value } = e.target; //it will destructure your name and value where ever you are using _handleChange method.
this.setState({
[name]: value // here we are setting the state dynamically.
});
alert(value)
}
render() {
return(
<View>
<TextInput
editable={true}
onChangeText={this._handleChange} // this will call _handleChange method.
secureTextEntry={true}
value={this.state.text}/>
</View>
)
}
}
此代码可能对您有所帮助:
this.state = {Alert.alert(
'Update available //your Title',
'Keep your app up to date to enjoy the latest
features //your Message',
[
{
text: 'Cancel',
onPress: () => console.log('Cancel Pressed'),
style: 'cancel',
}
]
)
}
<TextInput
editable={false}
onChangeText={text => Alert.alert(text)}
secureTextEntry={true}
value={this.state.text}
/>
我最终使用了 onContentSizeChange
,它会在文本更改时被调用。我确实发现,当以编程方式设置文本时,某些 TextInput 方法无法正常工作。
我认为 onChangeText 的事件处理函数是异步的,因此您应该使用 async/await
<Input onChangeText={(val) => { this.changeHandler(val) }} />
并且更改处理程序方法应该是
changeHandler = async (val) =>{
await this.setState({
[someKey]: val
})
.
.
.
do other stuff that depends on val
}
它以前用于发出 http 请求,该请求在输入值更改时触发,并使用输入值。
因为你没有绑定:
onChangeText={text => Alert.alert(text)}
应该改变:
onChangeText={this.changeFunction.bind(this)}
然后添加一个功能:
changeFunction(text){
alert(text);
}
=> 你可以测试,如果它不起作用,请投票给我:)