Я хочу, чтобы onTextChange запускался, когда я устанавливаю ему текст через изменения состояния. Я создаю свою экранную цифровую клавиатуру для ввода пин-кода, и я хочу улавливать изменения текста на TextInput, когда пользователь нажимает эти клавиши.
this.setState({text})
Мой TextInput выглядит так:
<TextInput
editable = {false}
onChangeText = {text => Alert.alert(text)}
secureTextEntry = {true}
value = {this.state.text}
UPD: Я нашел как-то связанный вопрос, но на него тоже нет ответа: TextInput не работает должным образом при программном вводе текста





Вы устанавливаете опору editable на false, тогда текст TextInput никогда не изменится, и onChangeText никогда не вызовет ...
так что проверьте и это: onChangeText = {(text) => {alert (text)}}
Вы можете использовать его, как показано ниже.
class MyComponent extends Component{
constructor(props){
super(props)
this.state = { text: null } //By default it will be null.
this._handleChangeEvent = this._handleChangeEvent.bind(this) //You need to bind your function here.
}
_handleChangeEvent(e) {
const { name, value } = e.target; //it will destructure your name and value where ever you are using _handleChangeEvent method.
this.setState({
[name]: value // here we are setting the state dynamically.
});
alert(value)
}
render() {
return(
<View>
<TextInput
editable = {true}
onChangeText = {this._handleChangeEvent} // this will call _handleChangeEvent 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.info('Cancel Pressed'),
style: 'cancel',
}
]
)
}
<TextInput
editable = {false}
onChangeText = {text => Alert.alert(text)}
secureTextEntry = {true}
value = {this.state.text}
/>
В итоге я использовал onContentSizeChange, который вызывается при изменении текста. Я обнаружил, что некоторые методы TextInput не работают должным образом, когда текст задается программно.
Замечательный товарищ. Большое спасибо!
Как именно вы использовали onContentSizeChange? насколько мне известно, вы не можете получить значение текста в onContentSizeChange.
@Lucky_girl Насколько я помню, я использовал его только для отслеживания изменений в TextInput; не получить значение 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-запрос, который запускается при изменении входного значения и использует входное значение.
Текст меняется, я это проверил. Хотя, когда я устанавливаю для редактирования значение true и изменяю текст с помощью системной клавиатуры, вызовы onChangeText работают по назначению.