当我通过状态更改设置文本时,我希望onTextChange
被触发。我正在构建我的屏幕数字键盘以输入密码,我想在用户按下这些键时在TextInput
上捕捉文本更改。
this.setState({text})
我的TextInput
看起来像这样:
<TextInput
editable={false}
onChangeText={text => Alert.alert(text)}
secureTextEntry={true}
value={this.state.text}
UPD:我发现某种相关问题,但它也没有答案:TextInput not working as expected when programmatically entering text
答案 0 :(得分:1)
我最终使用了onContentSizeChange
,当文本发生变化时会调用它。我确实发现一些TextInput方法在以编程方式设置文本时无法正常工作。
答案 1 :(得分:0)
您将editable
道具设为false
,然后TextInput
的文字永远不会改变,onChangeText
永远不会打电话......
答案 2 :(得分:0)
您可以像下面一样使用它。
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>
)
}
}
答案 3 :(得分:0)
此代码可能对您有所帮助:
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}
/>
答案 4 :(得分:0)
我认为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请求,该请求在输入值更改时被触发,并使用输入值。