Puente persistente entre un componente React VR y el código del módulo nativo

Estoy intentando que mi navegador envíe algunos eventos DOM a los componentes React VR.

Lo más parecido que tengo es este código usando "módulos nativos".

(client.js)

const windowEventsModule = new WindowEventsModule();

function init(bundle, parent, options) {
  const vr = new VRInstance(bundle, 'WelcomeToVR', parent, {
    ...options,
    nativeModules: [windowEventsModule]
  });

  windowEventsModule.init(vr.rootView.context);

  vr.start();

  return vr;
}

window.ReactVR = {init};

(WindowEventsModule.js)

export default class WindowEventsModule extends Module {
  constructor() {
    super('WindowEventsModule');

    this.listeners = {};

    window.onmousewheel = event => {
      this._emit('onmousewheel', event);
    };
  }

  init(rnctx) {
    this._rnctx = rnctx;
  }

  _emit(name, ob) {
    if (!this._rnctx) {
      return;
    }

    Object.keys(this.listeners).forEach(key => {
      this._rnctx.invokeCallback(this.listeners[key], [ob]);
    });
  }

  onMouseWheel(listener) {
    const key = String(Math.random());
    this.listeners[key] = listener;
    return () => {
      delete this.listeners[key];
    };
  }
}

Entonces mis componentes ahora pueden llamarWindowEvents.onMouseWheel(function() {})y recibir una devolución de llamada del mundo DOM.

Desafortunadamente, esto solo funciona una vez. Aparentemente, RN invalidará mi devolución de llamada después de que se llame.

Yo tambien investiguethis._rnctx.callFunction(), que puede llamar a una función arbitraria en algo llamado "módulo invocable". No veo cómo puedo llegar desde allí a mis componentes.

¿Hay algo que este olvidando? ¿Cuál es el patrón para alimentar mensajes arbitrarios del mundo nativo en el trabajador de fondo ReactVR?

Respuestas a la pregunta(1)

Su respuesta a la pregunta