티스토리 뷰
react-native에서 useFocusEffect는 React Navigation의 기능 중 하나이다.
이 훅은 스크린이 포커스 될 때 특정 작업을 수행하도록 설정하는 데 사용된다.
useEffect도 해당 페이지가 렌더링 될 때, 수행하는 작업을 지정할 수 있지만 React Navigation에서 화면을 넘기는 행동 자체는 해당 컴포넌트를 원마운트시키지 않기 때문에 페이지의 변경 "때마다" 지정한 함수가 호출되도록 할 수는 없다.
useFocusEffect는 반드시 useCallback과 같이 사용해야 하는데, 그렇지 않으면 페이지 안의 컴포넌트가 리렌더링될 때마다(useState 같은 친구가 업데이트될 때마다) 등록한 함수가 실행되어 버린다.
바로 한번 직전에 만든 MaterialBottomTabNavigator에서 어떻게 이 Hook이 동작하는지 알아보자.
◎MainScreen.js
import React, {useCallback} from 'react';
import {createMaterialTopTabNavigator} from '@react-navigation/material-top-tabs';
import {Text, View, Button} from 'react-native';
import Icon from 'react-native-vector-icons/MaterialIcons';
import {useFocusEffect} from '@react-navigation/native';
const Tab = createMaterialTopTabNavigator();
function HomeScreen({navigation}) {
useFocusEffect(
useCallback(() => {
console.log('이 화면을 보고 있어요.');
return () => {
console.log('다른 화면으로 넘어갔어요.');
};
}, []),
);
return (
<View>
<Text>Home</Text>
<Button
title="Detail 1 열기"
onPress={() =>
navigation.push('Detail', {
id: 1,
})
}
/>
</View>
);
}
(...)
뭐, 사실 특별할 건 없다.
useCallback이 내부의 함수를 해당 페이지가 포커스됐을 때 실행하고, 해당 페이지에서 다른 페이지로 넘어갔을 때 return 해줄 동작을 한번 호출한다.
이는 어떤 어플을 만들던 필수적으로 아주 자주 사용하게 될 Hook 같으니, 반드시 알아두자.
반응형
'Mobile > react-native' 카테고리의 다른 글
[react-native] FloatingButton Template (1) | 2024.01.23 |
---|---|
[react-native] Context API (0) | 2024.01.22 |
[react-native] Material Top Tabs Navigator (0) | 2024.01.12 |
[react-native] Bottom tab navigator (0) | 2024.01.11 |
[react-native] Drawer navigator (0) | 2024.01.11 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- javascript
- Async
- 맛집
- 정보보안기사 #실기 #정리
- await
- Promise
- 이탈리안 레스토랑
- 인천 구월동 이탈리안 맛집
- react
- redux
- 인천 구월동 맛집
- react-native
- AsyncStorage
- redux-thunk
- 파니노구스토
- Total
- Today
- Yesterday