강의 제목: 장바구니 기능 완성하기 가이드
detail 페이지에서 주문하기 눌렀을 때, 아이디가 같으면 수량만 늘어나고, 아이디가 다르면 새로운 항목으로 추가하는 기능에 대한 질문입니다.
강사님이 위 기능을 설명하기 전에 혼자 만들어보다가 강의를 봤습니다.
--------------------------------------------------------------------------------------------------------------
map을 활용한 제가 생각한 방법
결과: 아이디가 같을 때 수량만 1씩 올라가나, 새로운 항목이 추가되지는 않습니다.
코드:
let defState = [
{id: 6, name:'멋진신발', quan: 2},
{id: 3, name: '빨간신발', quan: 4},
{id: 4, name: '아뵤신발', quan: 2}
]
function reducer(state=defState, action){
if (action.type === '항목추가'){
let copy = [...state];
copy.map((a)=>{
if(a.id==action.payload.id){
a.quan++;
return copy;
} else{
copy.push(action.payload);
console.log(copy)
return copy;
}
})
--------------------------------------------------------------------------------------------------------------
강사님 제공 방법
결과: 당연하게 잘 돌아갑니다.
코드:
let defState = [
{id: 6, name:'멋진신발', quan: 2},
{id: 3, name: '빨간신발', quan: 4},
{id: 4, name: '아뵤신발', quan: 2}
]
function reducer(state=defState, action){
if (action.type === '항목추가'){
let found = state.findIndex((a)=>{return a.id===action.payload.id});
if (found>=0){
let copy = [...state];
copy[found].quan++;
return copy
}
else{
let copy = [...state];
copy.push(action.payload);
return copy;
})