• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

useSelector 사용시 undefined 문제

21.10.09 04:34 작성 조회수 1.07k

0

안녕하세요,
AppLayout.js 에서
 
const isLoggedIn = useSelector((state=> state.user.isLoggedIn);
 
이부분 state의 user가 undefined가 뜹니다...
 
어느부분을 더 확인해봐야 할까요?
TypeError: Cannot read property 'user' of undefined at C:\Users\oht36\react-projects\react-nodebird\prepare\front\.next\server\pages\index.js:152:101 at useSelectorWithStoreAndSubscription (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-redux\lib\hooks\useSelector.js:39:30) at useSelector (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-redux\lib\hooks\useSelector.js:139:25) at AppLayout (C:\Users\oht36\react-projects\react-nodebird\prepare\front\.next\server\pages\index.js:152:85) at processChild (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-dom\cjs\react-dom-server.node.development.js:3353:14) at resolve (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-dom\cjs\react-dom-server.node.development.js:3270:5) at ReactDOMServerRenderer.render (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-dom\cjs\react-dom-server.node.development.js:3753:22) at ReactDOMServerRenderer.read (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-dom\cjs\react-dom-server.node.development.js:3690:29) at renderToString (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\react-dom\cjs\react-dom-server.node.development.js:4298:27) at Object.renderPage (C:\Users\oht36\react-projects\react-nodebird\prepare\front\node_modules\next\dist\next-server\server\render.js:50:851)
 
 
 

답변 1

답변을 작성해보세요.

0

저 에러는 user가 undefined가 아닙니다. state가 undefined입니다. 리덕스 설정 쪽 코드 확인해보셔야 합니다. state는 객체여야하는데 undefined인것은 리덕스 초깃값 세팅 오류거나 reducer에서 return을 빠뜨리신 듯 합니다.

Jinwoo Cheon님의 프로필

Jinwoo Cheon

2022.01.15

음.. 저도 같은 현상 겪어서 이렇게 해결했습니다.

default로 state를 return 해주니까 해결되네요..

왜그럴까요?

 

switch (action.type) {
    case 'LOG_IN':
      return {
        ...state,
        user: {
          ...state.user,
          isLoggedIn: true,
          user: action.data,
        }
      }
    case 'LOG_OUT':
      return {
        ...state,
        user: {
          ...state.user,
          isLoggedIn: false,
          user: null,
        }
      }
    default:
      return{
        ...state,
      }
  }

state를 return 안하면 undefined를 return하게됩니다.