FE 파트장으로써 FE 팀원 기술핏을 맞추기 위한 기술 기초 개념 자료 작성
useQuery
Hook 에 익숙해집니다.QueryClientProvider
컴포넌트와 QueryClient
의 개념을 이해합니다.QueryClientProvider
가 있어야합니다.QueryClient
는 Context API 를 활용하여 캐싱된 데이터를 전역 상태와 비슷하게 관리해줍니다.// ~/src/App.js
import React from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import List from './components/List'
const queryClient = new QueryClient();
function App() {
<QueryClientProvider client={queryClient}>
<List />
</QueryClientProvider>
}
useQuery
를 사용하면 됩니다.useQuery(쿼리키배열, 쿼리함수, 옵션들(옵셔널))
useQuery
사용법// ~src/components/List.js
import React from 'react';
import axios from 'axios';
import { useQuery } from '@tanstack/react-query';
function List() {
const { data: posts, isInitialLoading } = useQuery(['posts'], () => axios.get('https://koreanjson.com/posts'));
// ES6 문법 data: posts - data 에 해당하는 값을 변수이름 posts 에 할당합니다.
console.log(posts?.data);
// 비동기이기 때문에 데이터 fetching 완료 전까지 posts 는 null 값이라 ? 키워드를 사용합니다.
return (
<div>
{/* isInitialLoading 이 데이터 Fetching 완료 전까지 true 였다가 완료 후 false 로 할당 됩니다. */}
{isInitialLoading ? (
<h1>Loading...</h1>
) : (
<ul>
{posts?.data.slice(0, 30).map((item) => (
<li>{item.title}</li>
))}
</ul>
)}
</div>
);
}
useQuery
사용법 (with 전역상태관리, Recoil)// ~src/components/List.js
import React from 'react';
import axios from 'axios';
import { useQuery } from '@tanstack/react-query';
import { useRecoilState } from 'recoil';
import { postsAtom } from '../atoms';
function List() {
const [ posts, setPosts ] = useRecoilState(postsAtom);
const { isInitialLoading } = useQuery(
['posts'],
() => axios.get('https://koreanjson.com/posts'),
{
onSuccess: res => {
setPosts(res.data);
}
}
);
// ES6 문법 data: posts - data 에 해당하는 값을 변수이름 posts 에 할당합니다.
return (
<div>
{/* isInitialLoading 이 데이터 Fetching 완료 전까지 true 였다가 완료 후 false 로 할당 됩니다. */}
{isInitialLoading ? (
<h1>Loading...</h1>
) : (
<ul>
{posts?.data.slice(0, 30).map((item) => (
<li>{item.title}</li>
))}
</ul>
)}
</div>
);
}
작성자 : 박연우
작성일 : 2022.10.31