Могу ли я контролировать порядок, в котором события происходят в событии 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 заполняет ввод последней нажатой клавишей, прежде чем она действительно откроется. Если есть другой способ решить эту проблему, это будет с благодарностью.

0 ответов

Другие вопросы по тегам