Демонстрация
код
функция checkTest
См. Комментарии к коду для наиболее важных замечаний.
checkText(text){
//create a new regular expression
const regex = new RegExp("@");
//check if the string contains an @
const res = text.match(regex);
// if res is not null, we have a match!
if (res != null){
if (this.state.autoCorrect){
// disable auto correction if it's still enabled
this.input.blur();
// hacky part, we need to dismiss the keyboard first, then we can show it again.
this.setState({autoCorrect: false}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}else{
if (!this.state.autoCorrect){
this.input.blur();
// enable auto correction if no @ is detected anymore
this.setState({autoCorrect: true}, () => {
setTimeout(() => this.input.focus(), 60);
});
}
}
//update text in state
this.setState({ username: text});
}
функция рендеринга
<View style={styles.container}>
<TextInput
value={this.state.username}
onChangeText={text => this.checkText(text)}
autoCorrect={this.state.autoCorrect}
/>
</View>
Полный рабочий пример
https://snack.expo.io/Skta6BJ34
Обсуждение
Кажется, вам нужно "перезагрузить" клавиатуру, чтобы повлиять на перезагрузку свойства autoCorrect. Я думаю, что это все еще ошибка и, надеюсь, будет исправлена в следующем выпуске. (см. эту проблему github ).
В то же время, вы можете использовать этот небольшой обходной путь и, возможно, сделать некоторые точные настройки времени / регулярных выражений и т. Д.
Редактировать:
Я нашел подробный ответ здесь , этот же вопрос решает аналогичным образом.