카트 리듀서 기능을 추가, 업데이트 및 삭제할 수 있습니다. 나는 또한 redux 저장소 내에 제품 배열을 가지고 있습니다. 제품 배열에 두 개의 항목이 추가되면 두 개의 항목이있는 대신 수량 값이 증가합니다. 필자의 주요 질문은 감속기가 어떤 논리를 포함하는지, 즉 제품 배열에 이미 정확한 제품이 포함되어 있는지 확인하고 제품 수량에 대한 업데이트 만 반환하거나 기존 제품에 대한 검사를 프레젠테이션 구성 요소 내에서 처리하고 새로운 제품 또는 수량 업데이트리액턴스 Redux : 리덕터에 로직이 포함되어야합니까?
function CartReducer (state = initialState, action) {
switch (action.type) {
case AddToCart:
return {
...state,
products: [...state.products, action.product],
totalPrice: state.totalPrice += (action.price * action.quantity)
}
case RemoveItemCart:
return {
...state,
products: [
...state.products.slice(0, action.index),
...state.products.slice(action.index + 1)
]
}
case UpdateItemQuantity:
return {
...state,
products: state.products.map((product, index) => {
if (index === action.index) {
return Object.assign({}, product, {
quantity: action.quantity
})
}
return product
})
}
default:
return state
}
}
감속재는 순수한 상태로 원하는 모든 논리를 가질 수 있습니다. 순수한 의미는 비동기 호출이나 컨텍스트 외부의 객체에 대한 변경이나 의존, 상태 변경에 따른 부작용이 없음을 의미합니다. –
React + redux는 CQRS + Event 소싱을 백엔드로 프론트 엔드하는 것입니다. 작업을 파견하는 것은 본질적으로 메시지를 이벤트 대기열에 넣는 것입니다. 감속기를 적용하는 것은 기본적으로 저장소를 다루는 것입니다. 내 의견으로는, 감속기에 들어가는 논리는 국가가 어떻게 저장되는지에 관한 것일뿐입니다. 최적화, 일관성 및 물건. – netchkin
참조로 https : // youtube/fU9hR3kiOK0? t = 21m6s 참조 - 이벤트 스트림을 액션으로 생각할 수 있습니다. 구체화 된 견해에 관해 이야기 할 때, redux 저장소가 주요한 견해 일 것입니다. 그런 다음 감속기는 작업과 관련하여 저장소를 점진적으로 변환하는 기능입니다. 감속기는 불변이어야합니다. 모든 부작용은 조치로 처리해야합니다. 다른 구체화 된 뷰에 관해서는 상태에 적용된 선택자에 의해 생성 된 중간 상태로 간주 될 수 있습니다. 기본적으로 감속기 및 선택기 작성은 여전히 변형 함수입니다. – netchkin