react-native 용 native module 제작시 주의 점 (NativeModules.MyLibrary가 계속 undefined인 문제)


(이종은(Jong Lee)) #1

react-native-create-library를 이용하여 리액트 네이티브 모듈 프로젝트를 생성하고 별도로 생성한 react-native 프로젝트에 이 모듈을 추가하여 테스트를 했습니다.
문제 없이 build까지 했는데 NativeModules에 새롭게 추가한 모듈이 없었습니다.

뭔가 실수하거나 깜박한 것은 없는지 수십번을 확인했죠. 그것도 iOS에서는 되고 안드로이드에서는 안되었어요.
그래서 뭔가 차분하게 다시 보다보니 iOS Objective-C에는 제가 임의의 함수를 하나 만들어서 export했고 Android에는 아직 초기 상태 그대로입니다.

설마 이것 때문인가 싶어서 한번 소스를 살펴보다 알게 된 사실은 …

상수나 메소드를 추가하지 않은 모듈은 NativeModules에 연결되지 않습니다.

이와 관련된 코드 링크 넣어 봅니다.

위에 코드에서 알수 있듯이 상수와 메소드가 없을 경우 모듈을 정보를 가져오는 곳에서 name만 return합니다. 그리고 있을 경우에는 다음과 같이 상수와 메소드를 module이라는 키에 넣어 줍니다.

{
  name : 'RCMyLibrary',
  module: {
    myMethod : ...,
    MY_VALUE: ...
  }

그런데 이걸 최종적으로 NativeModules에 연결할 때 에 module이라는 내용이 안채워져 있으면(== myMethod와 MY_VALUE가 없으면) 연결되지 않아서 네이티브에는 해당 모듈이 정상적으로 연결되었더라도 JS에서는 존재하지 않는 모듈이 됩니다.

급한데로 메모로 남겨봅니다. 잘못된 내용이나 추가적으로 참고할 내용을 알게 되면 글을 수정 하겠습니다. :slight_smile:

오늘도 즐거운 코딩하세요.