import { useEffect, useInsertionEffect } from"react";
import { BackHandler, Text, View } from"react-native";
constTestScreen = () => {
useEffect(() => {
BackHandler.addEventListener('hardwareBackPress', () => {
// 백 버튼 누름을 처리하는 사용자 정의 로직// 기본 동작(예: 앱 종료)을 방지하려면 true를 반환// 기본 동작을 허용하려면 false를 반환returntrue;
});
return() => {
// 이벤트 리스너 제거됨BackHandler.removeEventListener('hardwareBackPress', () =>true);
}
}, []);
return (
<View><Text>테스트 화면입니다.</Text>
</View >
)
}
export default TestScreen;
3) 공통 기능으로 구현하기
💡 [기능 설명] - 공통 Util로 분리하여서 각각 뒤로가기 버튼을 방지해야 하는 페이지에 응용하면 도움이 될 것 같습니다.
1. useEffect() - 화면이 렌더링된 이후 시점에 onPressBackBtn 함수를 호출합니다. - true 인 경우 뒤로 가기 버튼을 방지합니다 - false 인 경우 뒤로 가기 버튼을 허용하여 뒤로 가기를 수행합니다.
2. onPressBackBtn()backAction() 함수를 구성합니다.
- true : 응답 값을 true로 반환합니다. - false: 페이지를 이전 페이지로 이동시킵니다. 3. BackHandler.addEventListener() - 뒤로가기 버튼 액션에 대해 이벤트 리스너를 등록합니다. - 등록과 동시에 뒤로 가기 버튼을 누르면 onPressBackBtn() 함수를 호출합니다. 4. BackHandler.removeEventListener()
- 뒤로가기 버튼 액션 처리에 대해 이벤트 리스너를 제거합니다.
import { useNavigation } from"@react-navigation/native";
import { useEffect, useInsertionEffect } from"react";
import { BackHandler, View } from"react-native";
constTestScreen = () => {
const navigation = useNavigation();
useEffect(() => {
onPressBackBtn(true); // 뒤로가기 버튼을 방지합니다.// oronPressBackBtn(false); // 뒤로가기 버튼 클릭 시 goBack() 함수로 이전 페이지로 이동합니다.
}, []);
/**
* 뒤로가기 버튼을 눌렀을때 처리되는 함수
* @param {boolean} action : true 일 경우
* @returns
*/constonPressBackBtn = (action: boolean) => {
const backAction = (): boolean => {
// 파라미터가 true이면 뒤로가기 버튼을 방지합니다.if (action) {
return action;
}
// 파라미터가 false이면 뒤로가기 버튼 시 실제 뒤로가기를 수행합니다. else {
navigation.goBack();
return action;
}
}
// BackHandler에 대해 이벤트 리스너를 등록합니다.BackHandler.addEventListener(
'hardwareBackPress',
backAction,
);
// BackHandler에 대해 이벤트 리스너를 제거합니다.return() => {
BackHandler.removeEventListener('hardwareBackPress', backAction);
}
}
return (
<View><Text>테스트 화면입니다.</Text>
</View >
)
}
export default TestScreen;