2015-12-18 25 views
6

में "जावास्क्रिप्ट को ईवेंट भेजना" में "ReactContext" को कैसे समझें, मैं विधि sendEvent() विधि का उपयोग करना चाहता हूं, लेकिन ReactContext प्रतिक्रियाContext कैसे प्राप्त करें?प्रतिक्रिया मूल

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

उत्तर

0

मैं 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()ReactActivity के onCreate() विधि द्वारा कहा जाता है, इसलिए मुझे लगता है यह मान लेना कि sReactInstanceManager सही उदाहरण की ओर इशारा करेंगे सुरक्षित है, लेकिन इसके लिए मेरे शब्द नहीं लेते।

0

ReactInstanceManager के लिए एक स्थिर संदर्भ का उपयोग करने की आवश्यकता नहीं है; आप getReactNativeHost().getReactInstanceManager() पर कॉल करके इसे प्राप्त कर सकते हैं।

संबंधित मुद्दे