개발이야기
#네이티브 모듈에 함수 추가하기(React-Native)
Kim-D
2020. 11. 9. 15:34
React-Native 앱 개발 중에 네이티브 모듈에 함수를 추가 했던 부분을 정리
1. iOS (Objective-C)
A. RCT_EXPORT_METHOD 키워드를 사용하여 사용할 메소드 정의( .m file)
@interface LibClassName() @property (nonatomic, strong) RCTResponseSenderBlock callback; // RCTResponseSenderBlock 는 RCTBridgeModule.h 에 선언 되어 있음. // typedef void (^RCTResponseSenderBlock)(NSArray *response); @end @implementation LibClassName // React-Native 에서 사용 할 데이터 처리 callback(@[[NSString stringWithFormat:@"React-Native 의 javascript 로 넘길 스트링 형식 데이터"]]); // NSArray 에 NSString 타입의 데이터 3개를 Add 후 전달 시 React-Native 에서 index 0 값 데이터만 전달 되었음. // 참고로 직렬화된 JSON 형식 데이터를 받을 수 있다고 하는데, [NSJSONSerialization dataWithJSONObject: // options: error:] 값을 index 0 에 Add 후 전달 하면 javascript 에서 null 로 넘어온다. // 2021.04 추가 NSDictionary 로 전달 하면 JSON 형식의 객체가 전달 된다. } @end |
B. React-Native 에서 네이티브 모듈에 추가 한 함수 호출( .js file )
import { NativeModules } from 'react-native' const { LibClassName } = NativeModules; executeNativeData() { LibClassName.getNativeData(nativeData => { // 전달 받은 nativeData 를 상황에 맞게 처리 executeLogicFun(처리 된 nativeData); }); } |
2. android (JAVA)
A. @ReactMethod 를 사용하여 사용할 메소드 정의( .java file )
import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.WritableMap; import com.facebook.react.bridge.WritableNativeMap; public class LibClassName extends ReactContextBaseJavaModule { public LibClassName(ReactApplicationContext reactContext) { super( reactContext ); } @ReactMethod public void getNativeData(Callback callback) { // WritableMap, WritableNativeMap 을 이용하면 객체로 전달 가능 WritbleMap retData = new WritableNativeMap(); retData.putString("key", "value"); callback.invoke(retData); } } |
B. React-Native 에서 네이티브 모듈에 추가 한 함수 호출( .js file )
import { NativeModules } from 'react-native' const { LibClassName } = NativeModules; executeNativeData() { LibClassName.getNativeData(nativeData => { // 전달 받은 nativeData 를 상황에 맞게 처리 // 객체로 바로 전달 되어 . 참조 가능 executeLogicFun(nativeData.key); }); } |