recoilPersist()
- 페이지가 변경되더라도 상태관리를 유지하기 위해 생성
- 로그인 상태 관리할때,
export const isLoggedIn = atom({
key: `isLoggedIn${v1}`,
default: false,
});
이렇게 atom 형태로 저장해서 사용하면 컴포넌트가 전환될때 새로고침하면 값 보존이 안된다.
const { persistAtom } = recoilPersist();
export const LoginState = atom({
key: "LoginState",
default: false,
effects_UNSTABLE: [persistAtom],
});
이렇게 recoilPersist를 사용해서 선언해야 함.
로컬스토리지에 저장된 토큰을 활용하거나 자체 api를 만들거나 해서 로그인 여부를 확인하는 로직을 짠 후,
다음와 같이 useRecoilState를 이용해서 위에서 선언한 LoginState의 값을 변경한다.
값만 필요한 경우 useRecoilValue도 atom과 마찬가지로 사용할 수 있음
// useRecoilState
const [isLogged, setIsLogged] = useRecoilState(LoginState);
// useRecoilValue
const isLogged = useRecoilValue(LoginState);
Recoil - selector(비동기 데이터 처리)
atom이 있는데 selector를 왜 쓰는가?
- atom을 구독하고 있다가 atom의 상태가 변함에 따라 함수 호출 가능
- 서버와 통신하여 얻는 비동기 데이터를 전역 데이터로 가질 수 있음

get
- 함수가 할당될 수 있는 property. 여기서 서버와 통신함(async)
- atom의 값을 구독하고 있다가. setState에 의해 atom의 값이 변경될 때 get이 실행됨
set
- selector는 자체적으로 setState를 할 수가 없다 → set을 따로 설정해줘야 함
- 순서 : useSetRecooilState로 atom이 수정됨 → selector 안의 set이 실행 → selector 안의 get이 실행 → 함수 호출 (async)
'TIL > React' 카테고리의 다른 글
React.StrictMode로 인한 KOE320 에러 (카카오 로그인) (0) | 2022.12.09 |
---|---|
React) 백엔드와 연동하여 좋아요 기능 구현하기 <TIL_2022_07_31> (0) | 2022.07.31 |
React) <Outlet/>의 context를 이용하여 중첩 라우터에 props 넘겨주기 <TIL_2022_07_28> (0) | 2022.07.29 |
React) Recoil - 페이지 이동 시 비동기 데이터를 state로 넘긴 후 redirect될때 state값이 사라져서 발생하는 에러 해결 (selectorFamily) <TIL_2022_07_27> (0) | 2022.07.27 |
React) 객체 형태로 여러개의 state 관리하기 <TIL_2022_07_25> (0) | 2022.07.25 |