๐React-query ์๊ธฐ์ ์ JSX๋?
- JSX(javascript XML)๋ javascript์ XML์ ์ถ๊ฐํ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
- JSX๋ React์์ ์ฌ์ฉ๋๋๋ฐ ๊ณต์์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์๋๋ค.
- JSX๋ javascript ํ์ฅํ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ๋ฒจ๋ฑ๋ฑ์ ์ฌ์ฉํ์ฌ ํธ๋์คํ์ผ๋ฌ๋ก javascript ํํ์ ์ฝ๋๋ก ๋ณํ์ด ๋๋ค.
- JSX ๋ฌธ๋ฒ์ ๋ฐ๋์ ๋ถ๋ชจ์์ ํ๋๊ฐ ๊ฐ์ธ๋ ํํ ์ฌ์ผํ๋ค.
- <> </> ๋ฌธ๋ฒ์ผ๋ก ๋ถ๋ชจ์์๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- JSX์์ javascript ํํ์์ ์์ฑํ๋ ค๋ฉด {}๋ก ์ฝ๋๋ฅผ ๊ฐ์ธ์ค์ผํ๋ค.
- {isLoading && <div>Loading</div>}
- JSX์์ class์ฌ์ฉ์ด ์๋ className์ ์ฌ์ฉํ๋ค.
๐คณReact-query ๋?
- React-query๋ ์๋ฒ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค. ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๋น๋๊ธฐ์ ์ธ ๋์์ ๊ด๋ฆฌํ๊ธฐ์ ์ ํฉํ๋ค!
- React application์์ ์๋ฒ ์ํ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์บ์ฑํ๋ฉฐ, ์ง์์ ์ผ๋ก ๋๊ธฐํํ๊ณ ์ ๋ฐ์ดํธํ๋ ์์ ์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ค.
- React-query๋ฅผ ์ฌ์ฉํด์ axios, fetch๋ฑ์ ๊ฐ์ด ๋น๋๊ธฐ ์์ฒญ์ ๋ณด๋ด์ฃผ๋ ๋๊ตฌ๋ค๊ณผ ํจ๊ป ํจ์จ์ ์ผ๋ก ์ฌ์ฉ์ ํ ์์๋ค.
๐คณwhy? React-query!
- ์๋ฒ๋ฐ์ดํฐ์ ์บ์๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฆ React-query ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋๋์ ๋ฐ๋ผ ํด๋น ๋ฐ์ดํฐ ์บ์๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋๊ฒ์ React-query์ด์ง๋ง ์๋ฒ์ ์ ๋ฐ์ดํฐ๋ก ์บ์๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ๊ด๋ฆฌํ๊ณ ์ค์ ํ๋๊ฒ์ ์ฌ์ฉ์์ด๋ค.
- React-query๋ ์ค์ ์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ, ์บ์ฑ๊ด๋ฆฌ๋ฑ์ ์ค์ ํ ์ ์๋ค.
- react-query๋ loading, error state ๊ด๋ฆฌ, pagination & infinite scroll ๊ด๋ฆฌ, prefetching, mutations ๋ฐ์ดํฐ ๋ณ๊ฒฝ๊ด๋ฆฌ, ์ค๋ณต์ ๊ฑฐ ๋ฑ๋ฑ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ ํ ์ ์๋ ๊ฐ๋ ฅํ๊ณ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๐React-query ์ฌ์ฉ๋ฐฉ๋ฒ
- npm install react-query
- query client ๋ง๋ค์ด์ query์ cache๋ฅผ ๊ด๋ฆฌํ๋ ํด๋ผ์ด์ธํธ๊ฐ ํ์
- query provider ์ฌ์ฉํด์ ์ ์ญ์ผ๋ก ์์ ์ปดํฌ๋ํธ๋ค์ด React-qeury๋ฅผ ์ฌ์ฉํ๊ฒํจ
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { QueryClient, QueryClientProvider } from 'react-query';
const queryClient = new QueryClient();
ReactDOM.render(
<QueryClientProvider client={queryClient}>
<App />
</QueryClientProvider>
document.getElementById('root')
);
React ์ ์ญ์ React-query provider๋ฅผ ์ ์ฉํด์ค๋ค.
import { useQuery } from "react-query";
const { data, isError, isLoading } = useQuery(
'posts',
fetchPosts,
);
if(isLoading) return <h3>Loading...</h3>;
if(isError) return <h3>Oops, something went wrong</h3>;
useQuery ํ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ fetching ํ๋ค.
useQuery ์์ queryKey ๋ฐ์ดํฐ๋ฅผ ํจ์นญํ ๋ key์ด๋ฉฐ ํ์์ ์ผ๋ก ํ์ํฉ๋๋ค.
"fetchPosts๋ axios ํน์ fetch์ ํต์ ์ ํจ์๋ก ๋ฐ๋ก ๋ง๋ค์๋ค."
async function fetchPosts() {
const response = await fetch(
`API ํต์ URL`
);
return response.json();
}
๊ธฐ๋ณธ์ ์ธ React-qeury ์ฌ์ฉ๋ฒ์ ๋๋ค.
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React FAQ(์์ฃผ ๋ฌป๋ ์ง๋ฌธ) ์์ฝ๋์ธ ๊ธฐ๋ฅ (35) | 2023.03.07 |
---|---|
Next.js typescript mysql styled-components ์ ํ (30) | 2023.03.03 |
[React] ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ ํ ์ด์ ํ์ด์ง ์ด๋ (26) | 2023.02.17 |
json-server ๊ตฌ์ถํด์ React ํ๋ก์ ํธ (15) | 2022.12.19 |
React hooks useSate ์ ๋ํด์ (2) | 2022.06.09 |