Front-End/Library

Library] SWR : ์‘์šฉ_Mutate & Revalidation

์™•๊ฐ€๐Ÿ‘ 2023. 7. 3. 15:59
728x90
๋ฐ˜์‘ํ˜•

Mutate

mutate๋Š” ์›๊ฒฉ ๋ฐ์ดํ„ฐ ๋ฐ ์บ์‹ฑ๋œ ๊ฐ’์„ ๋ณ€๊ฒฝ, ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•ด๋‹นํ•˜๋Š” ํ‚ค๊ฐ’์— ๋ฐ์ดํ„ฐ๋ฅผ post๋‚˜ delete, patch ๋“ฑ ์ž‘์—…์ด ์ผ์–ด๋‚ฌ์„ ๊ฒฝ์šฐ, ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ๋  ๋•Œ

์‚ฌ์šฉ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. (revalidation)

 

Global๊ณผ Bound ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


 

 

Global Mutate

useSWRConfig ๋˜๋Š” swr์„ import ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

import { useSWRConfig } from "swr"
 
function App() {
  const { mutate } = useSWRConfig()
  mutate(key, data, options)
}

///////////////////////////////////////

import { mutate } from "swr"
 
function App() {
  mutate(key, data, options)
}
mutate(`/account/user`);

 

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒƒ๋„ 2๊ฐ€์ง€ ์„ ์–ธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ๊ณตํ™ˆ ๊ถŒ์žฅ์‚ฌํ•ญ์€ useSWRconfig๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค.

์—ญํ• ์€ ๊ฐ™์œผ๋‹ˆ, ์ƒ๊ด€์—†์„ ๋“ฏ์‹ถ์Šต๋‹ˆ๋‹ค.

 

 


 

 

Bound Mutate

import useSWR from 'swr'
 
function Profile () {
  const { data, mutate } = useSWR('/api/user', fetcher)
 
  return (
    <div>
      <h1>My name is {data.name}.</h1>
      <button onClick={async () => {
        mutate();
      }}>Uppercase my name!</button>
    </div>
  )
}

 

Global ๋ฐฉ๋ฒ•๊ณผ ๋‹ฌ๋ฆฌ useSWR์„ ํ†ตํ•ด key๊ฐ’์„ ๋ฐ”์ธ๋”ฉํ•ด ๋†จ๊ธฐ ๋•Œ๋ฌธ์— mutate ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 


 

 

data๊ฐ’์— ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด mutate๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..

 

mutate(key, { ...data, name: newName }, oprion); // binding ๋์„ ๊ฒฝ์šฐ, key์ƒ๋žต

 

mutate๋ฅผ ํ†ตํ•ด data์ถ”๊ฐ€๋˜๋Š” ๊ฑด ์บ์‹ฑ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ์ผ ๊ฒ๋‹ˆ๋‹ค. (์ €๋Š” ์‚ฌ์šฉ์„ ์•ˆ ํ•ด๋ด์„œ...)

๋”ฐ๋ผ์„œ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋  ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ๊ณ ์นจํ•˜๊ฑฐ๋‚˜ ๋‹ค์‹œ DB ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ํ–‰์œ„๋ฅผ ํ–ˆ์„ ๋•Œ, ์ถ”๊ฐ€๋œ data๋Š” ์—†์–ด์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

 

mutate๋„ option์ด ์กด์žฌํ•˜๋ฏ€๋กœ, ๊ณตํ™ˆ ํ™•์ธํ•ด ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

https://swr.vercel.app/ko/docs/mutation

 

 mutate๋Š” ๋ฐ์ดํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


 

 

SWR์—์„œ useSWRMutation์„ importํ•˜์—ฌ trigger๋ผ๋Š” ์„ ์–ธํ˜• ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด API๋ฅผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒŒ ์ตœ๊ทผ์— ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. 
(SWR 2.0 ๋ฒ„์ „)
get์š”์ฒญ์— ํ•œํ•ด์„œ๋งŒ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด ๋ฒ”์œ„๋ฅผ ๋Š˜๋ ค ํ†ต์‹  ๋ฉ”์„œ๋“œ ์ „์ฒด๋ฅผ ํ™œ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•„์ง ์ž๋ฃŒ๊ฐ€ ๋งŽ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๊ณ , ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์—†์–ด ์•„์ง์€ ๋”ฐ๋กœ ๋‹ค๋ฃจ์ง„ ์•Š๊ฒ ์ง€๋งŒ,
ํ†ต์ผ๋˜์–ด ํ•˜๋‚˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฑด ์ข‹์€ ๋ฉ”๋ฆฌํŠธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์•ˆ ๊ทธ๋ž˜๋„ ์ด๊ฒƒ์ €๊ฒƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ–๋‹ค ์“ฐ๊ธฐ ๋ฐ”์œ๋ฐ...
728x90

'Front-End > Library' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Library] swagger-ui-react  (0) 2023.07.07
Library] SWR : ์‘์šฉ_Pagination & InfiniteScroll(useSWRInfinite)  (0) 2023.07.04
Library] SWR : ์‘์šฉ  (0) 2023.07.03
Library] SWR  (0) 2023.07.03
Library] Swiper  (0) 2023.06.29