라이브러리
[recoil, recoil-persist] 로그인 구현시 recoil-persist로 storage에 토큰 넣기
개발조각
2023. 12. 19. 14:33
728x90
반응형
예제코드에서는 next.js, typeScript를 사용하고 있습니다.
recoil 설치
npm i recoil
recoil 세팅
// _app.tsx
import type { AppProps } from "next/app";
import { RecoilRoot } from "recoil";
export default function App({ Component, pageProps }: AppProps) {
return (
<RecoilRoot>
<Component {...pageProps} />
</RecoilRoot>
);
}
recoil-persist 사용이유
recoil-persist는 새로고침 시에도 데이터가 날아가지 않게 관리하기 위해 사용합니다.
recoil만 사용하면 새로고침 시 데이터를 저장한 recoil state가 증발하게 됩니다.
recoil-persist를 사용하면 새로고침을 해도 recoil state가 날아가지 않고 localStorage 또는 sessionStorage에 보관됩니다.
아무런 설정도 해주지 않으면 key는 localStorage에 기본적으로 저장하게 됩니다.
recoil-persist 설치
npm i recoil-persist
recoil-persist 사용
1. localStorage에 저장
import { atom } from "recoil";
import { recoilPersist } from "recoil-persist";
const { persistAtom } = recoilPersist({
key: "token",
});
//Recoil-persist를 적용시키려면 아래의 effects_UNSTABLE을 적어주어야 한다.
export const accessTokenAtom = atom<string>({
key: "access-token",
default: "",
effects_UNSTABLE: [persistAtom],
});
1-2. localStorage에 저장 (key값 지정 안 할 경우)
import { atom } from "recoil";
import { recoilPersist } from "recoil-persist";
const { persistAtom } = recoilPersist();
//Recoil-persist를 적용시키려면 아래의 effects_UNSTABLE을 적어주어야 한다.
export const accessTokenAtom = atom<string>({
key: "access-token",
default: "",
effects_UNSTABLE: [persistAtom],
});
2. sessionStorage에 저장
import { atom } from "recoil";
import { recoilPersist } from "recoil-persist";
// next.js는 SSR임으로 window객체의 유무를 확인해주어야 된다.
const sessionStorage =
typeof window !== "undefined" ? window.sessionStorage : undefined;
const { persistAtom } = recoilPersist({
key: "token",
storage: sessionStorage,
});
//Recoil-persist를 적용시키려면 아래의 effects_UNSTABLE을 적어주어야 한다.
export const accessTokenAtom = atom<string>({
key: "access-token",
default: "",
effects_UNSTABLE: [persistAtom],
});
참고자료
https://velog.io/@timosean/Web-Recoil-persist-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0
[Web] Recoil-persist 사용해보기, sessionStorage에 저장하기
임시저장 window.beforeunload event
velog.io
728x90
반응형