[ReactQuery] (1) ReactQuery ๋ ๋ฌด์์ธ๊ฐ?
์ ๊ทผ (์์ฝ)
reactQuery์ ๊ฐ์๋ฅผ ์์ฑํ๋ค.
1. Client State vs Server State
1. Client State
- ์น ๋ธ๋ผ์ฐ์ ์ธ์
๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์ ๋ณด ์๋ฏธ (๋จ์ํ ์ฌ์ฉ์์ ์ํ)
(ex_ ์ฌ์ฉ์๊ฐ ์ํ๋ ์ธ์ด๋ฅผ ์ ํํ๊ฑฐ๋ ๋ฐ์/์ด๋์ด ํ
๋ง๋ฅผ ์ ํํ๋ ๋ฑ์ ์๋ฒ์์ ์ผ์ด๋๋ ์ผ๊ณผ๋ ์๋ฌด ๊ด๋ จ์ด ์๋ ๊ฒ)
2. Server State
- ์๋ฒ ์ํ๋ ์๋ฒ์ ์ ์ฅ๋์ง๋ง ํด๋ผ์ด์ธํธ์ ํ์ํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ
(ex_๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ฐ์ดํฐ)
- ๋ฐ์ดํฐ๋ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ํ์๋์ด์ผ ํ๊ธฐ์ ์๋ฒ์ ์ ์ฅ๋จ
2. React Query ํน์ง
1. React Query๋ ํด๋ผ์ด์ธํธ์์ ์๋ฒ ๋ฐ์ดํฐ ์บ์๋ฅผ ๊ด๋ฆฌ
React Code ↔ React Query Cache ↔ Server
- React ์ฝ๋์ ์๋ฒ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋, Fetch๋ Axios๋ฅผ ์ฌ์ฉํด ์๋ฒ๋ก ๋ฐ๋ก ์ด๋ํ์ง ์๊ณ React Query ์บ์๋ฅผ ์์ฒญํฉ๋๋ค.
- React Query์ ์ญํ ์ React Query ํด๋ผ์ด์ธํธ๋ฅผ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋๋์ ๋ฐ๋ผ ํด๋น ์บ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ
2. ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ React Query์ด์ง๋ง ์๋ฒ์ ์ ๋ฐ์ดํฐ๋ก ์บ์๋ฅผ ์
๋ฐ์ดํธ ํ๋ ์๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฌ์ฉ์์ ๋ชซ
```
[React Query ์บ์ ์์]
key: ['blog-posts']
data: [
{
title: 'React Query',
tagLine: 'What is this thing?'
},
{
title: 'React Query Mutation',
tagLine: 'Not just For ninja tutles',
}
]
```
- ์ ์บ์์๋ 'blog-posts'๋ผ๋ ํค(key)๋ฅผ ํ ๋นํ ๋ฐ์ดํฐ๊ฐ ์์ => ์ด๊ฒ์ด ํด๋น ๋ฐ์ดํฐ๊ฐ ์๋ณ๋๋ ๋ฐฉ์
- ํด๋ผ์ด์ธํธ ์บ์์ ์๋ ์ด ๋ฐ์ดํฐ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ์ ์ผ์นํ๋์ง ํ์ธํด์ผ ํ๋๋ฐ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์!
(1). ๋ช
๋ นํ(imperatively) : invalidate data
- ์ฟผ๋ฆฌ ํด๋ผ์ด์ธํธ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฌดํจํํ๊ณ
- ์บ์์ ๊ต์ฒดํ ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๊ฐ์ ธ์ค๊ฒ ์ง์ํ๋ ๊ฒ
```
[React Query ์บ์ ์์]
key: ['blog-posts']
data: [
{
title: 'React Query',
tagLine: 'It is so great!!'
},
{
title: 'React Query Mutation',
tagLine: 'Not just For ninja tutles',
}
]
```
(2). ์ ์ธํ(declaratively) : configure how (ex_window focus) & when to trigger a re-fetch
- ๋ฆฌํจ์น(Refetch)๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ์กฐ๊ฑด์ ๊ตฌ์ฑํ๋ ๊ฒ
- staleTime: 30 seconds ์ฒ๋ผ ์ธ์ ํธ๋ฆฌ๊ฑฐ ํ ์ง๋ ์ค์ ํ ์ ์์
```
[React Query ์บ์ ์์]
key: ['blog-posts']
data: [
{
title: 'React Query',
tagLine: 'What is this thing?'
},
{
title: 'React Query Mutation',
tagLine: 'Not just For ninja tutles',
}
]
staleTime: 30 seconds
```
3. React Query์๋ ์๋ฒ์ํ ๊ด๋ฆฌ ๋ฟ ์๋๋ผ, ์๋ฒ ์ํ ๊ด๋ฆฌ์ ๋์์ด ๋๋ ๋ง์ ๋๊ตฌ๊ฐ ํจ๊ป ์ ๊ณต
(1). Loading & Error (states)
- ์๋ฒ์ ๋ํ ๋ชจ๋ ์ฟผ๋ฆฌ์ ๋ก๋ฉ ๋ฐ ์ค๋ฅ ์ํ๋ฅผ ์ ์งํด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ ํ์ X
(2). Pagination (ํ์ด์ง ๋งค๊น) & infinite scroll (๋ฌดํ ์คํฌ๋กค)
- ์ฌ์ฉ์๋ฅผ ์ํด ํ์ด์ง์ด๋ ๋ฌดํ์คํฌ๋กค์ด ํ์ํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ฐ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๋๊ตฌ๋ ์ ๊ณต
(3). Prefetching (=> ์๊ฐ ๋จ์ถ)
- ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์์ ์บ์์ ๋ฃ์ผ๋ฉด, ์ฌ์ฉ์๊ฐ data๊ฐ ํ์ํ ๋ ์ฑ์ด ์บ์์์ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ์๋ฒ์ ์ฐ๊ฒฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์X
(4). Mutations
- ๋ฐ์ดํฐ์ ๋ณ์ด(Mutation)๋ ์
๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ ๋ํ๋
(5). De-duplication of requests
- ์ฟผ๋ฆฌ๋ ํค๋ก ์๋ณ๋๊ธฐ ๋๋ฌธ์ React Query๋ ์์ฒญ์ ๊ด๋ฆฌํ ์ ์๊ณ
- ํ์ด์ง๋ฅผ ๋ก๋ํ๊ณ ํด๋น ํ์ด์ง์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ,
- React Query๋ ์ฟผ๋ฆฌ๋ฅผ ํ ๋ฒ์ ๋ณด๋ผ ์ ์์
- ๊ธฐ์กด ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ ๋์, ๋ค๋ฅธ ๊ตฌ์ฑ ์์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๊ฒฝ์ฐ, React Query๋ ์ค๋ณต ์์ฒญ์ ์ ๊ฑฐํ ์ ์์
(6). Retry on error
- ์๋ฒ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋ํ ์ฌ์๋๋ฅผ ๊ด๋ฆฌํ ์ ์์
(7). CallBacks
- ์ฟผ๋ฆฌ๊ฐ ์ฑ๊ณตํ๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฌ์ ๋๋ฅผ ๊ตฌ๋ณํด์ ์กฐ์น๋ฅผ ์ทจํ ์ ์๋๋ก ์ฝ๋ฐฑ ์ ๋ฌ๊ฐ๋ฅ