Могу ли я контролировать порядок, в котором события происходят в событии onChange в React?
У меня возникают проблемы с виртуальной клавиатурой в приложении Cordova при работе на очень специфическом устройстве (Nexus Player).
В основном это набор последней набранной клавиши до того, как она закончила открываться, в результате чего пользователь всегда вводит последнюю клавишу при открытии виртуальной клавиатуры. Так, например: если я наберу me@email.com
закройте виртуальную клавиатуру, как только я ее открою, она сразу наберет последнюю клавишу, поэтому в этом случае она станет me@email.comm
,
Я пытаюсь использовать события из плагина Cordova ( Ionic Keyboard), чтобы проверить, открыта ли клавиатура или нет, и я заметил, что каждый раз, когда я ее открываю, порядок, в котором происходят события, отличается.
Вот как выглядят мои события:
window.addEventListener('keyboardWillShow', () => {
console.log('Keyboard will still show! DONT TYPE!')
this.allowToType = false
})
window.addEventListener('keyboardDidShow', () => {
console.log('Keyboard did show! DONT TYPE!')
this.allowToType = true
})
window.addEventListener('keyboardDidHide', () => {
console.log('Keyboard did hide! RESET THE STATE!')
this.allowToType = false
})
Вот мой вклад в мой render()
метод:
<input
type='text'
name='email'
value={email || ''}
onChange={(evt) => this.handleOnChange(evt) }
data-focusable
/>
В заключение, this.handleOnChange(evt)
:
handleOnChange (evt) {
console.log(evt.target.value, this.allowToType)
if (this.allowToType) {
this.props.setEmail(evt.target.value)
} else {
console.warn('Keyboard is not visible!')
}
}
handleOnChange
Метод срабатывает иногда до, а иногда и после открытия виртуальной клавиатуры. Что, я думаю, может быть частью того, что вызывает проблему. Могу ли я что-нибудь сделать, чтобы контролировать, когда onChange
событие происходит по сравнению с клавиатурой?
Вся причина, по которой мне даже приходится это делать, заключается в том, что виртуальная клавиатура в Nexus Player заполняет ввод последней нажатой клавишей, прежде чем она действительно откроется. Если есть другой способ решить эту проблему, это будет с благодарностью.