- Recoil 새로고침 랜더링 문제2024년 08월 03일
- 홍유진
- 작성자
- 2024.08.03.:09
문제
이번 프로젝트에서 user 정보를 관리하기 위해 recoil 전역상태관리 라이브러리를 사용하였다.
recoil를 사용하여 user 정보를 프로필페이지에서 볼 수 있었는데 새로고침시 값이 초기화되는 문제가 있었다.
문제가 발생한 원인은 다음과 같았다.
recoil로 관리하는 상태는 클라이언트 사이드에서만 유지되므로, 페이지를 새로고침하면 서버 측에서 초기 상태를 가져와서 다시 렌더링하기 때문에 recoil 상태가 초기화된다.
쉽게 말해, 새로고침 시에 페리지가 렌더링 되면서 recoil 상태도 같이 초기화 된다는 말이다.
해결 방법
이를 해결하는 방법은 관련 라이브러리 recoil-persist 라이브러리를 사용하여 storage에 저장하는 것이다.
이는 storage에 저장하여 새로고침에도 기존에 있던 값으로 덮어씌우는 역할을 한다.
1. recoil-persist 라이브러리 설치
yarn add recoil-persist
2. atom 파일에서 storage에 저장
여기서 고민한했던 것은 localStorage, sessionStorage 중 어떤걸 이용하면 좋을까 고민했다.
user 정보가 사용자가 브라우저를 닫았다가 다시 열어도 로그인이 유지되어야 했기에 localStorage를 선택하였다.
import { atom } from "recoil"; import { recoilPersist } from "recoil-persist"; // types import { UserDto } from "../types/data/user"; const { persistAtom } = recoilPersist({ key: "localStorage", storage: localStorage, }); export const userState = atom<UserDto | null>({ key: "userState", default: null, effects_UNSTABLE: [persistAtom], });
결과
새로고침하여도 user 정보가 초기화되지 않고 localStorage에 저장되는 것을 볼 수 있다.
'Web Frontend' 카테고리의 다른 글
회원가입 form 구현(2)_버튼 활성화 (0) 2024.08.03 회원가입 form 구현(1)_유효성 검사 (0) 2024.08.03 react-Intersection-Observer 라이브러리를 이용해 무한스크롤 구현하기 (0) 2024.08.02 ThemeProvider로 theme.ts에서 디자인 시스템 설정하기 (0) 2024.07.10 IntersectionObserver를 활용한 Lazy Loading 적용 (0) 2024.06.23 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)