개발자
안녕하세요! RN으로 앱 개발 공부를 시작한 학생입니다. 개발 도중 해결이 어려운 문제가 있어서 고수님들의 도움을 받고자 글을 남깁니다. 문제는 다음과 같습니다. 하단 바 네비게이션을 만들었습니다. 하단 바로 이동 가능한 페이지는 페이지1부터 페이지4까지 4개입니다. 하단 바 페이지로 이동하면 해당 하단 바 아이콘의 색상이 변합니다. 모든 페이지에서 접근 가능한 페이지 5가 존재합니다. 페이지 5에서는 뒤로가기 버튼이 있고 페이지 5에서의 하단 바 아이콘은 이전 페이지에 영향을 받습니다. 예를들어 페이지1 -> 페이지5 의 경우 하단바 아이콘은 페이지1에 해당하는 아이콘의 색상이 변경됩니다. 저는 페이지1~4의 스크린 상태를 전역으로 관리해서 하단 바를 통해 다른 페이지로 이동할 때만 스크린 상태를 바꿔서 아이콘을 변경하는 식으로 작성했습니다. 문제는 만약 ios/android의 기기에서 기본적으로 있는 뒤로가기 기능을 사용했을 때 입니다.(ios의 경우 왼쪽화면을 오른쪽으로 넘기는 것) 페이지1 -> 페이지4에서 위 기능으로 이전 페이지인 페이지1로 넘어갔을 때 하단 바 아이콘은 변하지 않게 됩니다. 보통 앱 개발을 할 때는 이것을 어떻게 해결하는지 궁금합니다!
답변 0
첫 답변을 기다리고 있어요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 12월 07일
React Navigation은 navigation에서 상태가 변화하면 호출되는 이벤트를 제공합니다. 그 중 하나인 `addListener`는 뒤로 가기 행동을 감지하는데 사용할 수 있습니다. Stack.Screen 컴포넌트 내에서 useEffect hook을 사용해 addListener를 등록하여 'blur'(화면이 un-focus 되었을 때) 혹은 'focus'(화면이 focus 받았을 때) 이벤트를 감지하도록 할 수 있습니다. 다음의 예시 코드를 참고해보세요: ```tsx import { useNavigation, useIsFocused } from '@react-navigation/native'; // 페이지 컴포넌트 내부 export default function Page1() { const navigation = useNavigation(); const isFocused = useIsFocused(); useEffect(() => { const unsubscribe = navigation.addListener('blur', () => { // 화면이 un-focus 될 때 실행할 로직 console.log('Page1 blurred'); }); return unsubscribe; }, [navigation]); useEffect(() => { if(isFocused){ // 본 페이지로 돌아왔을 경우의 로직 (아이콘 색상 변경 등) } }, [isFocused]); return ( <View> ... </View> ); } ``` 위 방식으로 각각의 스크린에서 뒤로 가기 행동에 따른 반응을 설정할 수 있습니다. 단, 만일 React Navigation version5를 사용한다면 `useFocusEffect`라는 것도 존재함으로 참고하세요.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!