useRouterBackHandler
네비게이션에서 뒤로가기 동작을 처리할 수 있는 핸들러를 제공하는 훅이에요. 모달이나 독립적인 화면에서 뒤로가기 버튼을 눌렀을 때 네비게이션 스택이 없는 경우 뷰를 직접 닫아야 할 때 사용할 수 있어요. 이 훅은 @react-navigation/native
에서 제공하는 NavigationContainerRef
를 사용해서 네비게이션 스택이 남아 있다면 이전 화면으로 이동하고, 스택이 비어 있다면 사용자가 설정한 onClose
함수를 실행해요.
시그니처
typescript
function useRouterBackHandler({
navigationContainerRef,
onClose,
}: {
navigationContainerRef: NavigationContainerRefWithCurrent<any>;
onClose?: () => void;
}): { handler: any };
파라미터
- navigationContainerRefRequired · NavigationContainerRefWithCurrent<any>
현재 네비게이션 상태를 참조할 수 있는
NavigationContainerRef
예요. 뒤로가기 동작을 실행할 때 사용돼요. - onClose · () => void
네비게이션 스택이 비어 있을 때 실행할 함수예요. 예를 들어, React Native View 를 닫는 함수를 전달할 수 있어요.
반환 값
- { handler: () => void }
뒤로가기 버튼 등에서 사용할 수 있는 핸들러 함수예요.
예제
뒤로가기 버튼에 직접 핸들러를 전달하고 뷰를 닫을 수 있는 함수를 설정하는 예제
tsx
import { createNavigationContainerRef, useNavigation } from '@granite-js/native/@react-navigation/native';
import { BackButton, useRouterBackHandler } from '@granite-js/react-native';
import { useEffect } from 'react';
const navigationContainerRef = createNavigationContainerRef();
function MyBackButton() {
const navigation = useNavigation();
const { handler } = useRouterBackHandler({
navigationContainerRef,
onClose: () => {
// close the view
},
});
useEffect(() => {
navigation.setOptions({
headerLeft: () => <BackButton onPress={handler} />,
});
}, [handler, navigation]);
return <></>;
}