가수면
SWR 본문
npm i swr
전역 설정
'use client';
import { SWRConfig } from 'swr';
type Props = {
children: React.ReactNode;
};
export default function SWRConfigContext({ children }: Props) {
return (
<SWRConfig
value={{
fetcher: (url: string) => fetch(url).then((res) => res.json()),
}}
>
{children}
</SWRConfig>
);
}
해당 컴포넌트를 provider로 사용하면 아래처럼 간단하게 api요청 함수를 사용할 수 있음
const { data, isLoading, error } = useSWR('/api/me');
mutate의 경우
mutate만 해줄 경우 해당 api 데이터로 요청이 가지만, 아래처럼 전역 설정을 이용할 경우 한번에 여러 요청을 보낼 수 있게됨.
const { mutate: globalMutate } = useSWRConfig();
.
.
.
return mutate(addComment(post.id, comment.comment), {
optimisticData: newPost,
populateCache: false,
revalidate: false,
rollbackOnError: true,
}).then(() => globalMutate('/api/posts'));
mutate
revalidate 기능
const { mutate } = useSWRConfig();
const handleLike = (like: boolean) => {
fetch("api/likes", {
method: "PUT",
body: JSON.stringify({ id, like }),
}).then(() => mutate("/api/posts"));
};
function Profile () {
const { data, mutate } = useSWR('/api/user', fetcher)
옵션
optimisticData - 데이터를 클라이언트 캐시로 갱신
revalidate = true - 비동기 업데이트가 완료되면 캐시의 유효성을 다시 검사
populateCache = true - mutation 요청으로 받아온 결과를 캐시에 갱신
rollbackOnError = true - 요청 실패하면 이전 캐시로 되돌림
throwOnError= true - 요청 실패하면 에러 발생
리액트 쿼리의 success에서 invalidate하지 않고 맵 돌리는 것과 같은 결과를 할 수 있음
예시)
return mutate(updateLike(post.id, like), {
optimisticData: newPosts,
populateCache: false,
revalidate: false,
rollbackOnError: true,
});
'React > 라이브러리' 카테고리의 다른 글
리액트에서 네이버 스마트 에디터 구현 (0) | 2023.07.20 |
---|---|
[Sanity] CRUD (0) | 2023.06.29 |
Mongo DB (0) | 2023.06.15 |
NextAuth.js (0) | 2023.06.11 |
[Sanity] 기본 정리 (0) | 2023.06.11 |
Comments