-
현재 자동로그인을 구현하기 위해 로컬스토리지에 토큰 값을 저장해놓고, TokenContext.js에서 관리하는 방식을 이용하고 있습니다. TokenContext.js
LoggedOutRoute.js
LoggedInRoute.js
App.js
그런데 /students/:id을 직접 입력하거나 새로고침을 할 때, 로컬 스토리지에 token이 있는 상태인데 /login을 거쳐 다시 /students로 돌아가는 문제가 있습니다. /students를 직접 입력해도, /login을 거쳐서 다시 /students로 돌아오게 됩니다. |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
console.log('a');
useEffect(() => {
console.log('b');
}, []);
console.log('c'); 위 코드 실행 결과는 #541 과 #542 도 비슷한 고민이 있는 질문이었어서, 참고해보시면 좋을 것 같네요 :) 이를 해결하기 위해서 저는 토큰 상태를 |
Beta Was this translation helpful? Give feedback.
useEffect
는 한 차례 렌더가 된 다음 실행됩니다.위 코드 실행 결과는
a -> b -> c
가 아닌a -> c -> b
입니다. 즉 스토리지에서 토큰값을 불러오기 전에 렌더가 먼저 진행되고,<Redirect
를 먼저 만나게 되고, 로그인으로 리다이렉트가 먼저 됩니다. 뒤이어useEffect
가 토큰값을 받아와서 로그인되었다는 걸 알게 된 후 다시/students
로 리다이렉트되게 됩니다.#541 과 #542 도 비슷한 고민이 있는 질문이었어서, 참고해보시면 좋을 것 같네요 :)
이를 해결하기 위해서 저는 토큰 상태를
truthy
falsy
두 개로 나누지 않고,undefined
string
null
세 개로 나누는 방식을 선호합니다.undefined
일 경우는 첫 렌더라는 뜻이고 아직 토큰 정보를 모른다는 상태로 보고 처리합니다!