React Navigation에서 스크린을 초기 상태로 리셋하는 방법

A: React Navigation에서 화면 상태를 초기 상태로 재설정하는 방법 React Navigation에서 화면의 상태를 이전으로 돌아갈 때 초기 상태로 재설정하는 것은 흔한 도전입니다. 특히 상태를 관리하기 위해 useState와 같은 훅을 사용하는 함수형 컴포넌트에서는 이 작업이 까다로울 …

title_thumbnail(React Navigation에서 스크린을 초기 상태로 리셋하는 방법)

A: React Navigation에서 화면 상태를 초기 상태로 재설정하는 방법

React Navigation에서 화면의 상태를 이전으로 돌아갈 때 초기 상태로 재설정하는 것은 흔한 도전입니다. 특히 상태를 관리하기 위해 useState와 같은 훅을 사용하는 함수형 컴포넌트에서는 이 작업이 까다로울 수 있습니다. 이 블로그 포스트에서는 이 문제에 대한 다양한 해결책을 탐구하고 React Navigation에서 화면의 상태를 재설정하는 단계별 가이드를 제공합니다.

해결책 1: useEffect 훅 사용

화면의 상태를 재설정하는 한 가지 방법은 useEffect 훅을 활용하여 화면의 포커스 변경 사항을 감지하는 것입니다. 이를 통해 화면이 다시 포커스되면 상태를 재설정할 수 있습니다.

const A = ({ route, navigation }) => {
  const [input, setInput] = useState("");

  useEffect(() => {
    const unsubscribe = navigation.addListener('focus', () => {
      setInput("");
    });
    return unsubscribe;
  }, [navigation]);

  // 컴포넌트의 나머지 코드
}

위의 코드 조각에서는 useEffect 훅을 정의하여 네비게이션 객체에 ‘focus’ 이벤트를 감지하도록 합니다. ‘focus’ 이벤트가 발생하면 setInput 훅을 호출하여 입력 상태를 초기 상태인 빈 문자열로 재설정합니다.

해결책 2: unmountOnBlur 옵션 사용

상태를 재설정하는 또 다른 방법은 React Navigation이 제공하는 unmountOnBlur 옵션을 사용하는 것입니다. 이 옵션을 화면에 대해 true로 설정하면 해당 화면은 네비게이션에서 이동할 때 언마운트되고 다시 해당 화면으로 돌아올 때 다시 마운트됩니다.

<Drawer.Screen
  name="Your Screen"
  component={screen.ConcernAddScreen}
  options={{ unmountOnBlur: true }} // 화면을 재마운트하고 상태를 재설정합니다
/>

위의 코드 조각에서는 재설정하려는 화면의 네비게이션 옵션에 unmountOnBlur 옵션을 추가했습니다. 이를 통해 화면이 이동할 때 언마운트되어 상태가 재설정됩니다.

해결책 3: 리셋 액션 디스패치

프로그래밍적인 접근을 선호한다면 React Navigation에서 제공하는 CommonActions API를 사용하여 리셋 액션을 디스패치할 수 있습니다. 이 접근 방식을 사용하면 훅이나 네비게이션 옵션에 의존하지 않고 컴포넌트의 상태를 재설정할 수 있습니다.

const resetAction = CommonActions.reset({
  index: 0,
  routes: [{ name: "A" }]
});
navigation.dispatch(resetAction);

위의 코드 조각에서는 리셋할 원하는 경로(여기서는 “A” 화면)를 지정하는 resetAction 객체를 생성합니다. 그런 다음 네비게이션 객체를 사용하여 resetAction을 디스패치하여 “A” 화면의 상태를 초기 상태로 재설정합니다.

결론

요약하면, React Navigation에서 화면의 상태를 초기 상태로 재설정하는 여러 가지 방법이 있습니다. useEffect 훅을 활용하거나 unmountOnBlur 옵션을 사용하거나 리셋 액션을 디스패치함으로써 화면이 다시 이동될 때 깔끔한 상태로 시작할 수 있습니다. 프로젝트 요구사항에 가장 적합한 방법을 선택하고 이에 맞게 구현하세요.

React Navigation과 관련하여 다른 질문이 있거나 다른 도전 과제를 겪은 경우 아래 댓글에서 알려주세요!

참고 자료 : 

reactjs

Leave a Comment