앱을 Reload 하는 경우에는 JS컨텍스트가 초기화 된다.
하지만 Native 객체들은 초기화 되지 않아서, 새로운 fresh 한 상태로 만들기 위해서는
직접 수동으로 초기화 해주는 인터페이스를 구현해줘야 한다.
React-Native 내부에서 NativeModule.invalidate
라는 인터페이스에 의해서 초기화 로직은 호출되고
invalidate
는 각각 플랫폼에 맞는 인터페이스를 호출한다.
class YourModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule(reactContext) {
// deprecated, 하위호환 위해서 구현 필요
override fun onCatalystInstanceDestroy() {
super.onCatalystInstanceDestroy()
// Reset module here
}
// onCatalystInstanceDestroy 를 구현했다면 invalidate 는 구현하지 않아도 된다.
// 기본 동작이 onCatalystInstanceDestroy 를 호출하게 되어있다.
override fun invalidate() {
super.invalidate()
onCatalystInstanceDestroy()
}
}
- (void)invalidate {
// Reset module here
}
참고: https://github.com/facebook/react-native/commit/18c8417290823e67e211bde241ae9dde27b72f17