【问题标题】:How to understand the "ReactContext" in "Sending events to Javascript" in React Native如何理解 React Native 中“向 Javascript 发送事件”中的“ReactContext”
【发布时间】:2015-12-18 04:25:03
【问题描述】:

我想使用方法sendEvent(),但是reactContext怎么获取reactContext呢?

private void sendEvent(ReactContext reactContext,
                   String eventName,
                   @Nullable WritableMap params) {reactContext
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
  .emit(eventName, params);}

【问题讨论】:

    标签: android react-native


    【解决方案1】:

    不需要使用对 ReactInstanceManager 的静态引用;可以拨打getReactNativeHost().getReactInstanceManager()获取。

    【讨论】:

      【解决方案2】:

      我通过在MainActivity 类上保存对ReactInstanceManager 的静态引用并添加public static getContext() 方法暂时解决了这个问题。感觉不太对劲,但似乎有效。

      public final class MainActivity extends ReactActivity {
      
          private static ReactInstanceManager sReactInstanceManager = null;
      
          /* [...] */
      
          @Override
          protected ReactInstanceManager createReactInstanceManager() {
              ReactInstanceManager manager = super.createReactInstanceManager();
              sReactInstanceManager = manager;
              return manager;
          }
      
          public static ReactContext getContext() {
              if (sReactInstanceManager == null){
                  // This doesn't seem to happen ...
                  throw new IllegalStateException("Instance manager not available");
              }
              final ReactContext context = sReactInstanceManager.getCurrentReactContext();
              if (context == null){
                  // This really shouldn't happen ...
                  throw new IllegalStateException("React context not available");
              }
              return context;
          }
      
          /* [...] */
      }
      

      createReactInstanceManager()ReactActivityonCreate() 方法调用,所以我认为可以安全地假设sReactInstanceManager 将指向正确的实例,但不要相信我的话。

      【讨论】:

      • 虽然这个方法正确地执行了预期的功能,但我拒绝了它,因为将上下文保存为静态变量是不鼓励的行为。在这种情况下,它很可能是无害的,但可能会导致内存泄漏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2019-03-10
      相关资源
      最近更新 更多