Я встретил эту проблему сегодня.И я нашел простое решение, чтобы избежать отказов касания.
Поэтому я проверяю переменную this.lockSubmit
перед выполнением основных сервисных кодов.Выйдите из функции, если это ложное значение, потому что это означает, что есть еще один незаконченный сенсорный вызов.
Следующий оператор установлен this.lockSubmit
на true
.
И тогда я могу выполнить асинхронную операцию или операцию навигации после this.lockSubmit = true
После того, как сервисные коды былиОбратный звонок или закончен.Я установил this.lockSubmit
на false
.это утверждение означает, что сенсорный вызов завершен.Но иногда сервисные коды быстро заканчиваются, поэтому я добавляю setTimeout
, чтобы пересчитать эту задержку переменной блокировки.
class PageA extends React.Component {
// also work well with async function
onSubmit() {
if(this.lockSubmit) return;
this.lockSubmit = true;
// validate form
if(this.form.validate()) {
// jump to another page
this.props.navigation.push('Uploading');
}
this.setTimeout(() => this.lockSubmit = false, 500);
}
render() {
return (
<TouchableOpacity onPress={this.onSubmit.bind(this)}>
<Text>Submit</Text>
</TouchableOpacity>
);
}
}