본문으로 건너뛰기

리듀서

비공식 베타 번역

이 페이지는 PageTurner AI로 번역되었습니다(베타). 프로젝트 공식 승인을 받지 않았습니다. 오류를 발견하셨나요? 문제 신고 →

Redux FAQ: 리듀서

두 리듀서 간에 상태를 공유하려면 어떻게 해야 하나요? combineReducers를 꼭 사용해야 하나요?

Redux 스토어의 권장 구조는 상태 객체를 키(key)별로 여러 "슬라이스(slices)" 또는 "도메인(domains)"으로 분할하고, 각 데이터 슬라이스를 관리하는 별도의 리듀서 함수를 제공하는 것입니다. 이는 표준 Flux 패턴이 여러 독립 스토어를 갖는 방식과 유사하며, Redux는 combineReducers 유틸리티 함수를 통해 이 패턴을 더 쉽게 구현할 수 있게 합니다. 그러나 combineReducers는 필수가 아니며, 단순히 각 상태 슬라이스에 단일 리듀서 함수를 사용하고 일반 JavaScript 객체로 데이터를 다루는 일반적인 사용 사례를 위한 유틸리티 함수일 뿐입니다.

많은 사용자들이 나중에 두 리듀서 간에 데이터를 공유하려 시도하지만, combineReducers가 이를 허용하지 않는다는 사실을 발견합니다. 이에 대한 몇 가지 접근 방식이 있습니다:

  • 리듀서가 다른 상태 슬라이스의 데이터를 알아야 할 경우, 단일 리듀서가 더 많은 데이터를 처리하도록 상태 트리 구조를 재구성해야 할 수 있습니다.

  • 특정 액션을 처리하기 위한 커스텀 함수를 작성해야 할 수 있습니다. 이 경우 combineReducers를 자체 최상위 리듀서 함수로 교체해야 할 수 있습니다. 또한 reduce-reducers 같은 유틸리티를 사용하여 대부분의 액션은 combineReducers로 처리하되, 여러 상태 슬라이스를 넘나드는 특정 액션에는 더 전문화된 리듀서를 실행할 수 있습니다.

  • redux-thunk 같은 비동기 로직 미들웨어getState()를 통해 전체 상태에 접근할 수 있습니다. 액션 생성자는 상태에서 추가 데이터를 가져와 액션에 포함시킬 수 있으므로, 각 리듀서가 자체 상태 슬라이스를 업데이트하기에 충분한 정보를 갖게 됩니다.

일반적으로 리듀서는 단순한 함수라는 점을 기억하세요—원하는 방식으로 구성하고 세분화할 수 있으며, 더 작고 재사용 가능한 함수("리듀서 합성")로 분할하는 것이 권장됩니다. 이 과정에서 자식 리듀서가 다음 상태를 계산하기 위해 추가 데이터가 필요할 경우, 부모 리듀서에서 커스텀 세 번째 인자를 전달할 수 있습니다. 함께 사용할 때 리듀서의 기본 규칙인 (state, action) => newState를 따르고, 상태를 직접 변형(mutating)하지 않고 불변적으로(immutably) 업데이트하기만 하면 됩니다.

추가 정보

문서

토론

액션을 처리할 때 switch 문을 꼭 사용해야 하나요?

아니요. 리듀서에서 액션에 응답하기 위해 원하는 어떤 접근 방식도 사용할 수 있습니다. switch 문이 가장 일반적인 접근 방식이지만, if 문, 함수의 룩업 테이블(lookup table), 또는 이를 추상화하는 함수를 생성해도 무방합니다. 실제로 Redux는 액션 객체가 type 필드를 포함할 것을 요구하지만, 리듀서 로직이 반드시 이를 의존하여 액션을 처리해야 하는 것은 아닙니다. 그럼에도 불구하고 표준 접근 방식은 확실히 switch 문이나 type 기반의 룩업 테이블을 사용하는 것입니다.

추가 정보

문서

토론