euuuuuz:
2023. 5. 3. 09:28
2023. 5. 3. 09:28
- 로그인시 받는 유저 데이터 recoil state 는 새로고침시 날아감
- 새로고침시 마다 유저 정보를 API 요청 → XXXXXX
- recoil state 를 persist
- localStorage를 사용하는 방법이 있음
- 새로고침시 localStorage에 저장해둔 값을 state에 다시 입력
- localStorageEffect.js
function localStorageEffect(key) {
return ({ setSelf, onSet }) => {
const savedValue = localStorage.getItem(key);
if (savedValue != null) {
setSelf(JSON.parse(savedValue));
} else {
// 로컬 스토리지에 저장된 값이 없으면 로그아웃 처리
localStorage.removeItem(key);
localStorage.removeItem('acccessToken');
localStorage.removeItem('refreshToken');
if (window.location.pathname !== '/login') {
window.location.href = '/login';
}
}
onSet((newValue, _, isReset) => {
isReset
? localStorage.removeItem(key)
: localStorage.setItem(key, JSON.stringify(newValue));
});
};
}
export default localStorageEffect;
export const userInfoState = atom({
key: 'userInfoState',
default: {
id: 'M12341234',
name: '김철수',
accessLv: 3,
},
effects: [localStorageEffect('user')],
});