React.js
[실무 React.Js] React-query 데이터 검색/조회하기
Home-M
2024. 7. 20. 21:54
728x90
반응형
React Query는 서버 상태 관리를 쉽게 할 수 있도록 도와주는 강력한 라이브러리입니다. 이 블로그에서는 React Query를 사용한 조회 기능과 저장 기능을 중심으로 사용법을 설명하겠습니다.
React Query 설정
먼저 React Query를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:
npm install react-query
설치 후, QueryClient와 QueryClientProvider를 설정해야 합니다. 애플리케이션의 루트 컴포넌트에서 이를 설정합니다.
import React from 'react';
import { QueryClient, QueryClientProvider } from 'react-query';
const queryClient = new QueryClient();
const App = () => (
<QueryClientProvider client={queryClient}>
{/* 나머지 애플리케이션 컴포넌트 */}
</QueryClientProvider>
);
export default App;
이제 React Query를 사용할 준비가 되었습니다.
조회 기능 구현
React Query의 useQuery 훅을 사용하여 데이터를 조회할 수 있습니다. 아래는 예시 코드입니다:
import React, { useEffect, useRef, useState } from 'react';
import { useQuery } from 'react-query';
// 데이터 조회 함수
const fetchData = async (params) => {
const response = await fetch(`https://api.example.com/data?${new URLSearchParams(params)}`);
if (!response.ok) {
throw new Error('네트워크 응답에 문제가 있습니다');
}
return response.json();
};
const DataView = () => {
const [searchParams, setSearchParams] = useState({});
const gridRef = useRef();
// useQuery 훅을 사용하여 데이터를 조회합니다
const { data, refetch, isFetching } = useQuery(
['fetchData', searchParams],
() => fetchData(searchParams),
{ enabled: false } // 초기에는 비활성화
);
// 검색 버튼 클릭 시 호출되는 함수
const handleSearch = () => {
const params = {
key1: 'value1',
key2: 'value2',
};
setSearchParams(params);
refetch();
};
// 검색 파라미터가 변경될 때마다 데이터를 재조회합니다
useEffect(() => {
if (Object.keys(searchParams).length > 0) {
refetch();
}
}, [searchParams, refetch]);
return (
<div>
<button onClick={handleSearch}>검색</button>
{isFetching ? (
<p>로딩 중...</p>
) : (
<div ref={gridRef}>
{/* 데이터를 그리드에 표시합니다 */}
{data?.map((item, index) => (
<div key={index}>{item.name}</div>
))}
</div>
)}
</div>
);
};
export default DataView;
- fetchData 함수: 서버로부터 데이터를 가져오는 함수입니다.
- useQuery 훅: React Query를 사용하여 데이터를 조회합니다.
- handleSearch 함수: 검색 버튼 클릭 시 호출되어 검색 파라미터를 설정하고 데이터를 재조회합니다.
- useEffect 훅: 검색 파라미터가 변경될 때마다 데이터를 재조회합니다.
:
728x90