반응형
앱에서 데이터를 관리하기 위해 React Query를 적용하는 방법을 정리한다.
> 작성일 : 2025-01-30
> OS : macOS Sequoia 15.2 (Apple M4)
> NodeJS : v22.13.1
> NPM : v10.9.2
> ReactNative : v0.77
<1> React Query 설치
생성된 프로젝트에서 아래 명령을 수행
npm install @tanstack/react-query
<2> QueryClientProvider로 감싸기
앱의 레이아웃 최상위에 QueryClientProvider로 감싸주어 전역에서 사용할 수 있도록 한다.
// Create a client
const queryClient = new QueryClient()
function App() {
return (
// Provide the client to your App
<QueryClientProvider client={queryClient}>
<Todos />
</QueryClientProvider>
)
}
function Todos() {
// Access the client
const queryClient = useQueryClient()
// Queries
const query = useQuery({ queryKey: ['todos'], queryFn: getTodos })
// Mutations
const mutation = useMutation({
mutationFn: postTodo,
onSuccess: () => {
// Invalidate and refetch
queryClient.invalidateQueries({ queryKey: ['todos'] })
},
})
return (
<div>
<ul>{query.data?.map((todo) => <li key={todo.id}>{todo.title}</li>)}</ul>
<button
onClick={() => {
mutation.mutate({
id: Date.now(),
title: 'Do Laundry',
})
}}
>
Add Todo
</button>
</div>
)
}
<3> ReactQuery 분리 설정
ReactQuery.tsx 파일을 분리해 에러처리 옵션설정을 할 수 있다.
<3-1> Navigator 설정을 감싸준다.
import { NavigationContainer } from '@react-navigation/native';
import { createNativeStackNavigator } from '@react-navigation/native-stack';
import HomeTabNavigator from './HomeTabNavigator';
import ReactQuery from './ReactQuery';
export default function RootNavigator() {
// Define
const NativeStack = createNativeStackNavigator();
// View
return (
<ReactQuery>
<NavigationContainer>
<NativeStack.Navigator initialRouteName="HomeTabNavigator">
<NativeStack.Screen name="HomeTabNavigator" component={HomeTabNavigator} options={{ headerShown: false }} />
</NativeStack.Navigator>
</NavigationContainer>
</ReactQuery>
);
}
<3-2> ReactNode를 전달받아 공통 에러처리 및 옵션설정을 한다.
import { QueryCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';
export default function ReactQuery({ children }: { children: React.ReactNode }) {
const queryClient = new QueryClient({
queryCache: new QueryCache({
onError: (error: any, query: any) => {
// 에러처리
}
}),
defaultOptions: {
queries: {
// 옵션설정
refetchOnWindowFocus: false,
retry: false
}
}
});
return <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
}
반응형
'Setting' 카테고리의 다른 글
[Setting | ReactNative] 개발환경 구축하기 (7) - iOS 빌드 (0) | 2025.01.31 |
---|---|
[Setting | ReactNative] 개발환경 구축하기 (6) - Android 빌드 (0) | 2025.01.30 |
[Setting | ReactNative] 개발환경 구축하기 (4) - Icon 적용 (0) | 2025.01.28 |
[Setting | MacOS] Java (Jdk) Install (0) | 2025.01.27 |
[Setting | ReactNative] 개발환경 구축하기 (3) - React Navigation 적용 (0) | 2025.01.27 |