1. SWR : 공식 문서 링크 참고
SWR: React Hooks for Data Fetching
SWR is a React Hooks library for data fetching. SWR first returns the data from cache (stale), then sends the fetch request (revalidate), and finally comes with the up-to-date data again.
swr.vercel.app
짤막하게 정리하자면 SWR은 나뉘어져 있던 상태 관리 관련 기능을 하나로 묶게 해주는 Hook 이다. 나는 Context 와 Axios 를 바탕으로 상태를 관리하고 있었는데, 상태가 바뀔 때 마다 수동으로 context update 를 해주는 게 맞는가 싶은 생각이 들어 SWR 사용을 고려하게 되었다.
- 장점: 어떻게인지는 모르지만... swr 을 사용하면 useEffect 를 사용하지 않고도 데이터 갱신이 자동으로(우리가 원하는 수준으로 갱신이) 이뤄진다. React 와 React Native 사용 과정에서 코드 작성을 더욱 편하게 해줄 것이라 판단했다.
- 캐시된 데이터를 이용하기 때문에, context 에 데이터를 넣지 않고도 넣은 것처럼 이용할 수 있다. (axios 동작이 끝나고 새 데이터를 가져와도 그 전까지는 이전에 캐싱된 데이터를 이용하기 때문에 화면이 망가지지 않는다.)
- 차이를 코드로 보고 싶다면 다음 Example 참고: https://swr.vercel.app/getting-started#example
2. Axios 와 함께 사용하기
- 대부분의 예제가 fetch 를 기반으로 작성되어 있었다. 그래서 처음에 axios 어떻게 쓰나 생각했는데, 문서와 검색을 통해 전혀 걱정할 필요가 없다는 사실을 깨달았다.
SWR은 두 가지 인자를 바탕으로 동작한다. (다른 인자도 있지만 기본적으로는 이렇게 두 개)
1. key: 고유한 key 역할을 함과 동시에 fetcher의 인자로 들어간다.
2. fetcher: 실제로 동작하는 함수. (Fetch, Axios, GraphQL 등...)
import axios from "axios"
import useSWR from "swr"
const fetcher = url => axios.get(url).then(res => res.data)
function App() {
const key = '/api/data';
const { data, error } = useSWR('key', fetcher)
// fetcher의 인수로 key 가 들어간다.
// data 는 res.data, error 도 fetcher 의 error 가 들어간다.
//...
}
관련하여 swr 공식문서의 다음을 참고하도록 하자.
https://swr.vercel.app/docs/data-fetching#axios
3. 나가며
이 글은 swr 에 axios 를 어떻게 쓸 수 있는지를 정리한 내용이다. 그래서 딱 여기까지만 쓰는데, swr 이 제공하는 기능은 이보다 훨씬 많다. Mutation 도 봐야하고, Pagination 도 자세히 봐야한다. (기존의 useEffect 보다 훨씬 깔끔하게 해 준다.) Next.js 에서의 용례 또한 SWR 공식 문서가 제공하고 있다.
개인적으로 Context 쓰면서도 꽤나 고통받고 있었어서, SWR을 배우면 context 없이 더 효율적으로 쓸 수 있다는 게 마음에 들었다. (배울 게 더 적기도 하고...) get을 빼면 axios 사용은 Press 나 Submit 에서나 쓰기 때문에, SWR + axios 만으로도 데이터와 관련된 부분은 다 할 수 있지 않을까 그런 생각을 하게 된다.
4. 기타 참고
1) useSWR 의 기타 메소드는 여기서 자세히 소개해주고 있다.
[React, Next.js] - useSWR Hook 알아보기!
Next.js를 공부하다 Client 단에서 Data Fetch할 때 자주 사용 되는 swr 에 대해서 알게 되어 한번 정리를 해보았습니다. ⭐ 혹시 잘못 이해해서 잘못된 부분이 있다면 댓글로 알려주세요.! ⭐ useSWR 이란?
jaeseokim.dev
2) 적어도 get 에 관련해서는 로컬 상태와 원격상태 관리의 통합이 가능하다는 것을 보여주는 글.
Redux 를 넘어 SWR 로(2)
앞서 첫번째 글에서는 Redux 를 사용할 때 일반적으로 경험할 수 있는 몇가지 문제들을 언급하였습니다. 이번 글에서는 SWR 은 무엇이고 SWR 이 어떻게 Redux 를 대체할 수 있는 지에 대해 설명해 보
min9nim.vercel.app
3) swr을 사용해 커스텀훅을 만드는 예제. (나에게는 꽤 어려워서 느낌만 가져가라는 의미로 공유)
SWR을 사용한 useRequest, 리엑트 Data Fetching – dohoons(도훈) _(≥∇≤)ノミ☆
React Hooks가 나온 이후 Data Fetching을 좀 더 간결하게 하는 라이브러리가 많이 나오는 것 같습니다. 아래는 관련 라이브러리들을 npm trends에서 download 수를 비교해본 결과입니다. https://www.npmtrends.com/
dohoons.com
'개발' 카테고리의 다른 글
잡담: 이미지가 안 나오는데 alt 까지 깨졌다. 왜였을까? (0) | 2021.09.08 |
---|---|
mac os 에서 장고(django) 초기 세팅 정리 (0) | 2021.09.03 |
[git] local branch 생성 후 원격에 올리는 방법(upstream) (0) | 2021.07.22 |