1. To Do
A screen에서 B screen으로 navigate한 후 다시 A로 goBack했을 때 goBack한 순간 A screen에서 api 호출을 다시 해야한다.
(C screen에서 A screen으로 오면 아무것도 하지 않는다)
2. How To
2-1. react navigation 활용 (해결책x)
https://reactnavigation.org/docs/function-after-focusing-screen/
react-navigation은 아래에 보이듯이 총 3가지 방법을 제공한다.
- Listening to the 'focus' event with an event listener.
- Using the useFocusEffect hook provided by react-navigation.
- Using the useIsFocused hook provided by react-navigation.
이 중에 react-navigation은 2번을 추천해서 2번을이용해보았다. 스낵 예제를 참고
그러나 C screen에서 A screen에서 왔을 때도 감지를 하므로 이건 해결책이 될 수 없다!
2-2. DeviceEventEmitter 활용 (해결책 o)
https://github.com/react-navigation/react-navigation/issues/684
A screen에서 api를 재호출하는건 B screen에서 A screen으로 왔을 때만 진행되어야 하므로 DeviceEventEmitter가 더 적당하다.
- A screen
import React, { useEffect } from 'react';
import { DeviceEventEmitter } from 'react-native';
useEffect(() => {
DeviceEventEmitter.addListener('abc', () => {
alert('A screen from B screen')
})
}, []);
- B screen
import React, { useEffect } from 'react';
import { DeviceEventEmitter } from 'react-native';
useEffect(() => {
return () => {
DeviceEventEmitter.emit('abc');
}
}, []);
이렇게 하면 B screen이 unmount 될 때 A screen에서 등록해놓은 리스너가 동작하고, C screen에서 A screen으로 왔을 때 emit을 하지 않기 때문에 내가 의도한대로 동작한다!
Buy Me A Coffee!
https://www.buymeacoffee.com/daheeahn
'Develop > React Native' 카테고리의 다른 글
[React Native / Android] KeyboardAvoidingView를 쓰지 않았는데도 키보드가 레이아웃에 영향을 줄 때 (0) | 2020.07.10 |
---|---|
[React Native / Android] 안드로이드 에뮬레이터 오프라인일 때 / Emulator Offline (2) | 2020.07.06 |
[React Native] react native android apk 뽑기 (2) | 2020.06.06 |
[React Native] react-native-svg ProgressCircle로 시계 나타내는 법 / startAngle, endAngle (0) | 2020.05.24 |
[React Native] GraphQL & Apollo & Code Generator 사용법 (0) | 2020.05.11 |