【问题标题】:Event handling in ReactVRReactVR 中的事件处理
【发布时间】:2017-09-26 07:39:06
【问题描述】:

一直在尝试 ReactVR,我对处理事件几乎没有疑问。根据Cusors and Input 中的文档,找出事件的类型就像阅读事件的type 一样简单。

进入 onInput 的事件可以通过检查 类型字段,它将是“MouseInputEvent”之一, “KeyboardInputEvent”、“TouchInputEvent”或“GamepadInputEvent”

但在下面的代码中,event.type 给出了undefined

_onInput(event) {
    console.log(event.type);//undefined
}

我最终能够通过这样做来嗅探事件类型

_onInput(event) {
    let syntheticEvent = event.nativeEvent.inputEvent;
    console.log(syntheticEvent.type);
}

这是预期的行为还是我错过了什么。

几个相关问题

  1. 我们是否必须使用 event.nativeEvent 来嗅探事件?
  2. 我们如何找出事件的目标,例如我是否要绑定 onInput 事件到 Plane ,目前正在检查 event.nativeEventtarget 作为数值?不是 很有帮助。
  3. 最后,ReactJS 调用事件的方式似乎不起作用 反应VR。例如,在前者中,我们只需

    <Plane onInput={this._onInput} lit={true} />
    

    但这不起作用,在后者我们必须

    <Plane onInput={(event) => this._onInput(event)} lit={true} />
    

    这是为什么?

注意:我对 ReactJS 有一些 exp,而对 React Native 有零,我猜 ReactVR 倾向于后者,如果很明显的话

【问题讨论】:

  • 一位主要贡献者解释了这一点here。看看吧。

标签: javascript virtual-reality webvr react-360


【解决方案1】:

发生这种情况是因为 react 中的事件对象被重用并在超出函数范围后立即被刷新,因此您必须将其存储为变量以供进一步使用。

【讨论】:

  • erm ...但它还没有超出函数范围,所以它不应该在 _onInput() 中访问吗?问题更多的是为什么我们以问题中描述的这种方式访问​​事件类型。
  • 在文档中有很好的描述:facebook.github.io/react/docs/events.html
  • 信不信console.log是异步的,所以它不会及时得到结果@alexander vitanov在处理它的过程中是正确的
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多