SWR 소개 및 사용법 #332
gitul0515
started this conversation in
03.Technical
Replies: 1 comment
-
감사합니다! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
SWR이란?
데이터 fetch, 즉 GET에 특화된 라이브러리라고 할 수 있다.
그 외 POST, PUT 등은 axios를 그대로 사용할 예정이다.
왜 필요한가
1. CSR에서 데이터 fetching 로직 단순화
아래는 우리 프로젝트의 유저 정보 조회 API이다.
훨씬 명확하고 간단하며, 선언적임을 알 수 있다.
클린코드 만세2. 캐싱 기반 데이터 전역 관리
useSWR('/api/signin', Fetcher)
를 호출했다면 무슨 일이 일어나는가?캐시?
한 번 fetch한 데이터를 내부적으로 캐시한다.
즉, 클라이언트에 잠시 저장을 해둔다는 의미이다.
다른 컴포넌트에서 동일한 상태를 사용하고자 할 경우, 캐시해둔 상태를 그대로 리턴한다.
캐싱을 기반으로 데이터를 전역적으로 공유한다는 것이 이 의미이다.
예시
후기 상세페이지에서 후기 단건 조회 API를 사용한다. (현재는 구현 달라짐)
후기 수정 페이지에서도 후기 단건 조회 API를 사용한다.
(새로고침이 일어날 수 있으므로 필요하다)
두 페이지(컴포넌트)는 아래와 같은 SWR을 사용한다. key가 동일하다.
원격 데이터를 사용하는 서로 다른 컴포넌트가 같은 key를 사용한다면 동일한 상태를 공유한다
잠깐!
현재 axios의 경우, 로그인 여부에 따라 authRequest, unAuthRequest로 다른 요청을 보내고 있다.
이에 따라 응답 데이터가 달라지기 때문이다.
이와 같은 동적인 요청도 useSWR을 통해서 가능하다.
아래는 전역적으로 설정한 SWR 옵션이다.
아래는 ‘후기 단건조회’의 응답 테스트다. useSWR을 사용하였다.
로그인 하지 않은 경우
로그인 한 경우
SWR을 통해서도 인증 여부에 따른 동적인 요청이 가능함을 확인하였다.
그 외에도, Fetcher 함수 및 baseURL을 전역적으로 설정해두었다.
아래 PR에 적용하였다.
#238
사용하는 쪽에서는 Fetcher 함수를 꼭 전달할 필요가 없으며,
예컨대 아래와 같이 사용하면 된다.
전시회 상세 페이지
전시회 상세 페이지에서도 SWR을 사용한다면…어떤 효과가 있을까?
id가 152인 전시회 상세 페이지에 들어갔다가, 뒤로가기를 눌러 밖으로 나온 뒤,
해당 전시회 상세 페이지를 다시 들어간다면?
“이미 서버에서 한 번 데이터를 불러왔으므로, 캐시된 데이터를 사용할 수 있다”
3. SWR vs react-query
react-query가 기능에 있어 더 다양하다고 하지만,
Next.js와의 호환성 및 사용의 용이함 측면에서는 SWR이 장점이 있다고 생각한다.
4. 기타 다양한 옵션들
SWR의 사용법
반환값
파라미터
참고자료
[SWR 이란 무엇인가? (#백엔드 데이터 #전역)](https://basemenks.tistory.com/245)
[데이터 가져오기 - SWR](https://swr.vercel.app/ko/docs/data-fetching)
Beta Was this translation helpful? Give feedback.
All reactions