React Native에서 네이티브 모듈 간의 상호 통신
7418 단어 reactnativejavakotlinswift
JavaScript에서 사용하기 쉽지만 기본 모듈 간에 사용하는 방법은 공식적으로 문서화되어 있지 않습니다.
저는 여러 개의 고유한 기본 모듈을 가지고 있으며 중복 코드 작성을 피하기 위해 ObjC/Swift/Java/Kotlin의 다른 기본 모듈에서 해당 메소드를 호출하고 싶었습니다.
이를 수행하는 방법을 이해하기 위해 React Native의 핵심을 파헤쳤습니다.
아이폰 OS
RCTBridge 이해하기
RCTBridge
는 JavaScript 앱과 통신하기 위한 클래스입니다.다른 기본 모듈과 함께 작업할 수 있는 몇 가지 유용한 방법을 제공합니다.
/**
* Retrieve a bridge module instance by name or class. Note that modules are
* lazily instantiated, so calling these methods for the first time with a given
* module name/class may cause the class to be synchronously instantiated,
* potentially blocking both the calling thread and main thread for a short time.
*
* Note: This method does NOT lazily load the particular module if it's not yet loaded.
*/
- (id)moduleForName:(NSString *)moduleName;
- (id)moduleForName:(NSString *)moduleName lazilyLoadIfNecessary:(BOOL)lazilyLoad;
// Note: This method lazily load the module as necessary.
- (id)moduleForClass:(Class)moduleClass;
이러한 메서드를 사용하여 모듈의 인스턴스를 가져올 수 있습니다.
RCTBridge 인스턴스 가져오기
브리지 모듈에서 다음과 같이
RCTBridge
에 대한 속성을 추가해야 합니다.@interface YourModule : NSObject <RCTBridgeModule>
@property (nonatomic, weak) RCTBridge *bridge;
@end
@implementation YourModule
@synthesize bridge = _bridge;
@end
그게 다야.
bridge
속성은 모듈이 초기화될 때 자동으로 설정됩니다.다른 네이티브 모듈 인스턴스 가져오기
예를 들어 다음과 같이
RCTUIManager
의 인스턴스를 얻을 수 있습니다.#import <React/RCTUIManager.h>
RCTUIManager* uiManager = [self.bridge moduleForClass:[RCTUIManager class]];
또는 다음과 같이 이름으로 가져올 수 있습니다.
#import <React/RCTUIManager.h>
RCTUIManager* uiManager = [self.bridge moduleForName:@"RCTUIManager"];
기계적 인조 인간
ReactContext 이해하기
ReactContext
클래스는 iOS의 RCTBridge
와 유사합니다.다음과 같이 다른 기본 모듈과 함께 작업할 수 있는 편리한 방법을 제공합니다.
/** @return the instance of the specified module interface associated with this ReactContext. */
public <T extends NativeModule> T getNativeModule(Class<T> nativeModuleInterface)
이를 통해 클래스별로 네이티브 모듈의 인스턴스를 얻을 수 있습니다.
ReactContext 인스턴스 가져오기
브리지 모듈에서 코드는 이미 다음과 같아야 합니다.
public class YourModule extends ReactContextBaseJavaModule {
private final ReactApplicationContext reactContext;
public AttachmentProcessorModule(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
}
따라서
this.reactContext
를 통해 빠르게 액세스할 수 있습니다.다른 네이티브 모듈 인스턴스 가져오기
예를 들어 다음과 같이
UIManagerModule
의 인스턴스를 얻을 수 있습니다.import com.facebook.react.uimanager.UIManagerModule;
UIManagerModule uiManagerModule = this.reactContext.getNativeModule(UIManagerModule.class);
이제 다른 모듈의 메서드를 호출할 수 있습니다.
도움이 되길 바랍니다.
Reference
이 문제에 관하여(React Native에서 네이티브 모듈 간의 상호 통신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/craftzdog/inter-communication-between-native-modules-on-react-native-57bn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)