인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

frenchkebab님의 프로필 이미지
frenchkebab

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

더미데이터와 포스트폼 만들기

useSelector 질문

작성

·

345

0

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

답변 2

0

frenchkebab님의 프로필 이미지
frenchkebab
질문자

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를 속성으로 가진 객체죠)

frenchkebab님의 프로필 이미지
frenchkebab
질문자

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

frenchkebab님의 프로필 이미지
frenchkebab
질문자

아 제가 rootReducer와 헷갈렸네요.

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

 

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

frenchkebab님의 프로필 이미지
frenchkebab
질문자

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

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

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

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

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

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

frenchkebab님의 프로필 이미지
frenchkebab

작성한 질문수

질문하기