해결된 질문
작성
·
77
0
7.15 :: 상태 변수와 컴포넌트 언마운트 강의 부분에서
SIGN IN 과 SIGN UP 버튼으로 이동시
(NOBRIDGE) LOG SignIn Mount
(NOBRIDGE) LOG SignUp Mount
(NOBRIDGE) LOG SignIn Mount
로그에 이렇게만 표시가 되고있는 상태입니다.
SignUp UnMount 가 되지 않는 상태인데
어떤부분에서 잘못됐는지 찾지를 못해서 질문드려봅니다. 감사합니다!
깃주소입니다.
https://github.com/dvrakry/rn-photo
답변 2
1
안녕하세요,
버전이 변경되면서 동작도 달라졌네요.
사용하는 버전의 공식 문서를 확인하면 도움이 됩니다.
react navigation 7 문서에 따르면, navigate 함수는 새로운 화면을 추가한다고 합니다.
https://reactnavigation.org/docs/navigating/#navigating-to-a-new-screen
This allows us to express the intent to add another route regardless of the existing navigation history.
native stack에서 화면을 빼내고 이전 화면으로 돌아가는 방법은 popTo 함수를 사용하면 됩니다.
https://reactnavigation.org/docs/native-stack-navigator#popto
Navigates back to a previous screen in the stack by popping screens after it.
https://github.com/dvrakry/rn-photo/blob/master/src/screens/SignUpScreen.js#L29
https://github.com/dvrakry/rn-photo/blob/master/src/screens/SignUpScreen.js#L104
두 라인의 navigate함수를 popTo로 변경하시면 됩니다.
현재 스택에 쌓여있는 화면을 확인하고 싶다면, 다음 문서를 참고하시기 바랍니다.
https://reactnavigation.org/docs/use-navigation-state
감사합니다
0
안녕하세요, 인프런 AI 인턴입니다. dvdve님.
컴포넌트의 언마운트를 확인하는 부분에서 문제가 발생하고 있는 것 같습니다. 보편적으로 이런 경우 컴포넌트 언마운트가 되는 상황에서 console.log
나 Cleanup Function
이 호출되지 않는 문제일 수 있습니다.
useEffect
를 사용하여 컴포넌트 언마운트 시 로그가 출력되도록 했는지 확인해 주세요. 예를 들어, 컴포넌트가 언마운트 될 때 특정 작업(Cleanup Function)을 수행하도록 useEffect
의 return 문 안에 로그를 추가해야 합니다. useEffect(() => {
console.log("SignUp Mount");
return () => {
console.log("SignUp UnMount"); // 컴포넌트가 언마운트될 때 호출
};
}, []);
네비게이션 구조 확인: 네비게이션 설정에 문제가 있는 경우도 있으니, 네비게이션 구조를 점검해보세요. 만약 중첩된 네비게이션 구조라면, 특정 스크린이 완전히 제거되지 않을 수 있습니다.
의존성 배열 확인: useEffect
에 전달되는 의존성 배열이 비어있지 않다면, 의존성 배열의 값이 변경될 때마다 컴포넌트는 재마운트됩니다. 의존성 배열을 빈 배열로 두어서 첫 마운트와 언마운트에만 반응하게 할 수 있습니다.
이와 관련된 추가적인 해결책은 다음 유사한 질문에서 참고하실 수 있습니다:
위 사항들을 확인해 보시고도 문제가 해결되지 않는다면, 코드와 네비게이션 구조를 조금 더 점검해 보시고, 의문이 지속될 경우 추가적인 정보를 제공해 주시면 보다 정확한 도움을 드릴 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사드립니다 선생님!