我可以控制React中onChange事件上事件发生的顺序吗?

时间:2018-08-08 16:39:54

标签: javascript reactjs cordova onchange nexus-player

在非常特定的设备(Nexus Player)上运行时,我在Cordova应用程序上使用虚拟键盘时遇到一些麻烦。

基本上,它是在完成打开之前键入最后键入的键,从而导致用户在打开虚拟键盘时始终键入最后一个键。因此,例如:如果键入me@email.com,请关闭虚拟键盘,当我重新打开虚拟键盘时,它将立即键入最后一个键,因此在这种情况下它将变为me@email.comm

我正在尝试使用Cordova插件(Ionic Keyboard)中的事件来检查键盘是否打开,并且我注意到每次打开键盘时,事情发生的顺序都是不同的。 / p>

这是我的活动:

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 个答案:

没有答案