SWR 이란
- 원격 데이터 패치를 위한 리액트 커스텀 훅이다.
SWR 사용방법
- 리액트 커스텀 훅이지만 npm을 통해서 설치를 해줘야 한다.
- npm으로 SWR을 설치해주기면 하면 사용은 쉽다.
데이터 불러오기
import { useSWR } from 'swr';
// api를 전달해주는 url과 fetcher를 준비해준다.
const url = '/api/'
const fetcher = async(url) => {
// 전달받은 parameter url 은 useSWR 훅에 넘겨준 url이 넘어온다.
const res = await axios.get(url) // axios 사용해도 되고 fetch 함수를 사용해도 된다.
return res.data
}
// useSWR 훅에 위 url과 fetcher를 argument로 전달해 준다.
const { data } = useSWR(url, fetcher)
데이터 업데이트
- mutate 하기
mutate의 경우에는 해당 api를 통해서 업데이트 하고자하는 데이트를 서버를 통하지 않고 바로 UI에 반영하는 것이다. 따라서 서버를 통해서 전달 받아야하는 유니크한 값(ID)의 경우에는 mutate되지 않는다.
import { useSWR } from 'swr';
// url과 fetcher 설정 생략
// useSWR에서 data 뿐만아니라 mutate도 받아 올 수 있다.
const { data, mutate } = useSWR(url, fetcher)
// mutate할 데이터 값을 넣어준다.
// id 같이 서버에서 넘겨줘야 하는 값의 경우에는 해당하지 않는다.
muteat(data: [
...data,
{
name,
age,
}
])
- trigger 사용하기
trigger의 역할은 해당하는 api를 통해서 사용자가 업데이트하면 해당 api에 get요청을 한번 더 보내서 업데이트 된 데이터를 서버로부터 가져오는 역할을 한다.
import { useSWR, trigger } from 'swr';
// 위에서 url이라는 변수로 선언해준 api를 넣어준다.(아주 쉽고 간편하다!)
trigger( key: 'url' )
SWR 장점
- 장점
- 데이터 패칭, 뮤테이션 등이 간편하다
- 기본적으로 data fetch 진행 상태에 따라서 isLoading, isValidating을 제공하기 때문에 사용자 경험을 개선 시킬 수 있다.
- 한 부모 아래 다른 컴포넌트에서 같은 api로 서버 호출이 있어도 한번의 통신으로 처리할 수 있다. = 리소스 사용을 효율적으로 할 수 있다.