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

mhr님의 프로필 이미지

작성한 질문수

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

비동기 작업이 없을 경우 useReducer와 redux의 dispatch 함수의 실행으로 인한 state 변경 순서가 보장이 안되나요?

작성

·

557

0

제로초님 안녕하세요. 

지난 번 조언해주셨던 것처럼 복잡한 컴포넌트의 상태 관리는 useReducer로 하고 앱 전체에서 공유하는 상태는 따로 reducer를 만들어서 필요에 따라 redux-saga를 쓰면서 진행하고 있는데요. 혹시 useReducer에서 나오는 dispatch 함수와 useDispatch를 통해서 가져오는 dispatch 함수를 통한 상태 변경순서가 보장되지 않나요? 

현재 한 가지 이벤트에 대해서 useDispatch를 통해서 global state를 변경시키고, 그 결과를 useSelector를 이용해서 global state에서 가져와서 useReducer의 dispatch 함수에 데이터로 넘겨주어서 useReducer를 사용하고 있는 컴포넌트의 state를 변경시키는 부분을 구현하고 있는데요. useDispatch의 dispatch 함수를 통해서 global state를 변경시키는 것까지는 되는데, useReducer의 dispatch 함수가 그 결과를 반영해서 상태를 변경시키지 못하는 것 같습니다. 두  dispatch 함수가 같은 함수 안에서 호출되어서 동시에 불리는 것은 분명한 것 같은데 컴포넌트에서 잘 반영을 못하네요. 

redux-saga는 최대한 비동기 처리시에만 사용하려고 생각 중인데, 이렇게 여러 개의 action을 동시에 처리할 때는 thunk나 redux-saga는 반드시 사용해야하는 것인가요? 

감사합니다. 

답변 2

1

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

dispatch 이후의 값은 useEffect에서 받으셔야 합니다. dispatch를 하면 일반적으로 리렌더링되므로 리렌더링 된 후 useEffect에서 변경된 값을 적용할 수 있습니다.

여러개의 액션을 동시에 처리하는 건 그냥 dispatch만 나열해도 되는데요.

비동기 액션이 끼어있을 때 순서를 보장하고 싶으시면 thunk나 saga 쓰시면 됩니다.

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

말씀하신 방식으로 잘 해결했습니다. 그런데 이렇게 작성하다보니 한 이벤트를 처리하는 로직이 useEffect와 이벤트 처리 함수로 분산되어서 가독성이 안 좋아지는 것 같은데요. useEffect와 같은 훅은 컴포넌트 안에서도 위쪽에 둔다고 들은 것 같은데, 이런 경우는 그냥 이벤트 처리 함수와 나란히 두기도 하나요? 혹시 현업에서는 어떤 식으로 하시나요? 감사합니다. 

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

그룹이 되는 훅들은 커스텀훅으로 빼면 좋습니다

0

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

감사합니다. 큰 도움 되었습니다!

mhr님의 프로필 이미지

작성한 질문수

질문하기