• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

useSelector 질문

22.08.19 21:15 작성 조회수 239

0

안녕하세요 제로초님
 
const { isLoggedIn } = useSelector((state) => state.user);
 
요 코드에서 useSelector의 state에 들어갈 state 인자에는
index.js, post.js, user.js 의 어느것인지 어떻게 알고 누가 넣어주는건가요?

답변 2

·

답변을 작성해보세요.

0

const rootReducer = combineReducers({
index: (state = {}, action) => {
switch (action.type) {
case HYDRATE:
console.log('HYDRATE', action);
return { ...state, ...action.payload };

default:
return state;
}
},
user,
post,
});

요 부분 코드를 말씀드렸던 것입니다.

useSelector에서 해당 reducer를 통해 state를 인식하는 것인가 싶어서요

useState의 경우 결국 접근을 하려면 해당 state 혹은 setState 함수를 받아오지 않습니까?

근데 redux에서는 단순히 useSelector((state) => state.user) 식으로 되있는데

state 매개변수에는 무엇을 넣어주는 것이며 그 redux state는 어떻게 등록이 된 것인지 싶어서요.

 

initialState의 경우에는 객체를 저장해둔 것이지 createContext처럼 넣어준 것이 아닌데

어떠한 과정을 통해서 redux state가 등록되어지는지가 헷갈린 것 같습니다.

 

질문이 불분명하여 번거롭게해드려 죄송합니다.

네 useSelector에 넣는 함수의 매개변수인 state는 저기 rootReducer의 state를 가져오게 되어있습니다.

https://github.com/reduxjs/react-redux/blob/master/src/hooks/useSelector.ts#L33-L65

코드를 보시면 redux도 context api 쓰고 있습니다.

reducer랑 state는 별개의 개념이 아니라 한몸입니다. rootReducer에서 combineReducer를 했으니 state도 합쳐지는 겁니다.

0

매개변수 state는 항상 rootState입니다. (rootState는 user와 post를 속성으로 가진 객체죠)

그러면 항상 이름을 rootState으로 해주어야 하는 것인가요?

아뇨 코드에서도 보다시피 rootState는 없는데요?

아 제가 rootReducer와 헷갈렸네요.

reducers/user.js 와 reducers/post.js 에 각각 선언된 initialState가 어떻게 합쳐져서 rootState가 되는 것인건가요?

 

reducer의 경우 index.js에서 combineReducers를 통해 합쳐지니 이해할 수가 있는데 state 부분은 아리까리하네요 ㅠ.ㅠ

reducer를 합치는게 state를 합치는 것과 똑같습니다.

아 그렇군요... 답변 감사합니다!

마지막으로 한 가지만 여쭙겠습니다

useSelector((state) => ...);

의 코드에서 reducer의 이름을 rootReducer로 해주어야 하는 것인가요?

reducer를 어떻게 인식해서 state를 받아오는 것인가요?

질문이 이해가 안 가는 것이 rootReducer라는 코드를 안 썼는데 무엇을 왜 계속 rootReducer로 써야 하냐고 질문하시는 건가요? 저 자리는 리덕스state로 고정되어있습니다. 매개변수는 이름 마음대로 지어도 되고요.

useState에서도 [a, setA] 이름 마음대로 짓는것과 똑같습니다. [b, c]로 하든 [setC, c]로 하든 아무 상관 없는 것처럼요.