- Published on
React Native 4단계: API 연동과 상태 관리 확장
[4단계] API 연동과 상태 관리 확장
1. fetch, axios로 외부 API 호출
fetch 기본 예시
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => res.json())
.then(data => setPosts(data));
}, []);
axios로 더 간단하게
npm install axios
axios.get('https://jsonplaceholder.typicode.com/posts')
.then(res => setPosts(res.data));
- 실무에선 axios가 응답 처리, 에러 처리, interceptor 등에서 더 편리하다
2. 리스트 출력: FlatList 사용
import { FlatList, Text } from 'react-native';
<FlatList
data={posts}
keyExtractor={item => item.id.toString()}
renderItem={({ item }) => <Text>{item.title}</Text>}
/>
- FlatList는 map()보다 성능 좋음 (가상 스크롤)
- 반드시 keyExtractor로 고유한 키를 지정
3. Context API or Zustand로 전역 상태 관리
Context API 예시
const UserContext = createContext();
function App() {
return (
<UserContext.Provider value={{ name: 'H.Y' }}>
<Main />
</UserContext.Provider>
);
}
const { name } = useContext(UserContext);
Zustand (간단 전역 상태 관리)
npm install zustand
import create from 'zustand';
const useStore = create(set => ({
count: 0,
increment: () => set(state => ({ count: state.count + 1 }))
}));
const { count, increment } = useStore();
- Redux보다 코드가 훨씬 짧고 간단하다
4. 로딩, 에러 처리 기본 구조
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
axios.get('/api')
.then(res => setData(res.data))
.catch(err => setError(err.message))
.finally(() => setLoading(false));
}, []);
- 사용자 경험을 위해 로딩 UI (ActivityIndicator)는 필수
5. Skeleton UI와 캐싱 (선택)
- 로딩 중일 때 "흰 화면"이 아니라, 유사한 뼈대 UI를 보여주는 게 좋음
- FlatList에서 기본 placeholder 구성하거나 react-native-skeleton-placeholder 사용
요약
- fetch/axios로 외부 API 연결 가능, 실무는 axios 추천
- FlatList로 리스트를 빠르게 렌더링
- 상태는 Context나 Zustand로 관리, 필요한 수준에 맞게 선택
- 에러/로딩 처리는 기본, UX의 시작점
심화학습
Q1. FlatList와 ScrollView의 차이는 뭐고, 언제 어떤 걸 써야 하나요?
A1. ScrollView는 모든 항목을 한 번에 렌더링해서 성능 이슈 있음. FlatList는 보이는 항목만 렌더링해서 메모리 절약과 성능이 우수. 긴 리스트는 반드시 FlatList 사용.
Q2. 상태관리에 Redux 대신 Zustand를 써도 되나요? 실무에서 괜찮나요?
A2. 중소 규모 앱에선 충분히 실무 가능. 코드가 짧고 hooks 기반이어서 매우 빠르게 쓸 수 있음. 대규모 앱에서는 상태 추적, 디버깅 편의성 때문에 Redux를 선호하기도 한다.
Q3. API 요청 시 캐싱이나 재사용이 필요한 경우 어떤 걸 고려해야 하나요?
A3. 상태를 유지하거나, 동일한 데이터를 여러 컴포넌트에서 공유하려면 Zustand, React Query, 혹은 SWR 같은 라이브러리를 쓰면 캐싱과 갱신, 실패 재시도 등을 자동으로 처리해준다.