Ponte persistente entre um componente React VR e o código do módulo nativo

Estou tentando fazer com que meu navegador envie alguns eventos DOM para os componentes do React VR.

O mais próximo que cheguei foi desse 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];
    };
  }
}

Agora meus componentes podem chamarWindowEvents.onMouseWheel(function() {})e receba um retorno de chamada do mundo DOM.

Infelizmente, isso funciona apenas uma vez. Aparentemente, o RN invalidará meu retorno de chamada depois que ele for chamado.

Eu também investigueithis._rnctx.callFunction(), que pode chamar uma função arbitrária em algo chamado "módulo de chamada". Não vejo como posso ir de lá para meus componentes.

Há algo que estou perdendo? Qual é o padrão para alimentar mensagens arbitrárias do mundo nativo no trabalhador em segundo plano do ReactVR?

questionAnswers(1)

yourAnswerToTheQuestion