리덕스로 reducer 짜는데, extraReducer 쓰지 말라는 경고문을 봤음.
얼마 전까지는 문제 없었는디...
암튼 오늘 그거 알아볼거임
reducer는 action type과 그에 따른 동작을 정의해서
switch
랑 case
로 관리해야함
근데 이건 중첩이 깊어질 수록 코드가 길어지고, 원본 객체를 변형시킬 위험이 높아짐
근디 createReducer()
로 mutative한 logic을 작성해도,
알아서 immutative한 업데이트가 이루어진다고 함
더 나아가, builder callback
을 활용하여 중첩을 더욱 효율적으로 해결할 수 있도록 해줌
// 각 라인마다 빌더 메서드를 나누어 호출.
const counterReducer = createReducer(initialState, (builder) => {
builder.addCase(increment, (state) => {})
builder.addCase(decrement, (state) => {})
})
// 또는 메서드 호출을 연결하여 연속적으로 작성.
const counterReducer = createReducer(initialState, (builder) => {
builder
.addCase(increment, (state) => {})
.addCase(decrement, (state) => {})
})
요런 식으로!
Builder CallbackPermalink
Builder Callback은 builder 객체 내의 addCase, addMatcher, addDefaultCase 메서드를 호출하여 리듀서의 액션에 대한 처리를 정의할 수 있게 해준다.
addCase(actionCreator, reducer)Permalink
액션 타입이 정확히 일치하면 reducer로 처리한다.
addMathcer(matcher, reducer)Permalink
액션에 대해 matcher의 패턴과 일치하는지 확인하고, 만약 일치한다면 처리한다. 여러 addMatcher들과 패턴이 일치한다면 작성된 순서에 맞춰 차례로 reducer로 처리한다.
이런것도 쓸 수 있음