npm i - g react - native - create - library
ReactContextBaseJavaModule를 상속받아 작업해야함
@ReactMethod : RN과 통신할 메서드에 붙임
public class ToastModule extends ReactContextBaseJavaModule {
public ToastModule (ReactApplicationContext reactContext ) {
super (reactContext );
}
@ ReactMethod
public void show (String message , int duration ) {
Toast .makeText (getReactApplicationContext (), message , duration ).show ();
}
}
ReactPackage를 구현한 클래스 생성
NativeModule 타입을 구현한 List를 생성해서 modules 추가
public class CustomToastPackage implements ReactPackage {
@ Overrid
public List <NativeModule > createNativeModule (ReactApplicationContext reactContext ) {
List <NativeModule > modules = new ArrayList <>();
modules .add (new ToastModule (reactContext ));
return modules ;
}
}
만든 모듈 패키지를 MainApplication.java에 등록
// MainApplication.java
@ Override
protected List <ReactPackage > getPackages () {
return Arrays .<ReactPackage >asList (
new MainReactPackage (), new CustomToastPackage ()
);
}
NativeModule 객체를 통해서 ToastModule을 연결
export default(es6)는 연결이 안되는 이슈가 있어서 module.exports(commonJS) 사용
import { NativeModule } from 'react-native' ;
module . exports = NativeModules . ToastModule ;
import ToastModule from 'native' ;
ToastModule . show ( 'Awesome' ) ;
ReactImageManager라는 클래스가 이미 존재하는 상황이라고 가정
public class ReactImageManager extends SimpleViewManager <ReactImageView > {
public static final String React_CLASS = "RCTImageView" ;
@ Override
public String getname () {
return React_CLASS ;
}
}
일반 모듈이 createNativeModule()을 통해 등록했다면 UI 모듈은 createViewManagers()로 등록
@ Override
protected List <ViewManager > createViewManagers (ReactApplicationContext reactContext ) {
return Arrays .<ReactPackage >asList (
new ReactImageManager ()
);
}
ImageView.js: React 컴포넌트와 연결
requireNativeComponent() 함수를 통해서 UI모듈 컴포넌트 생성
export default(es6)는 연결이 안되는 이슈가 있어서 module.exports(commonJS) 사용
import { requireNativeComponent } from 'react-native' ;
module . exports = requireNativeComponent ( "RCTImageView" ) ;
import ImageView from './ImageView' ;
export default function App ( props ) {
return < ImageView />
}