function reducer(state = 초기값, 액션){
if( 액션.type === '수량증가'){
let copy = [...state];
copy[0].quan++;
copy[0].pric += 120000;
return copy;
}else if( 액션.type === '수량감소'){
let copy2 = [...state];
if(copy2[0].quan>0){
copy2[0].quan--;
copy2[0].pric -= 120000;
}
return copy2;
}else{
return state;
}
}
저는 이런 식으로 reducer함수를 만들었는데요.
다름이 아니고 스프레드 문법을 사용하면 state배열의 값만 복사가 되고, 주소는 복사가 안되어서 새로운 복사본을 만드는 걸로 알고있는데, + 버튼을 누르면 let copy = [...state] 부분이 계속 실행 되는데, 그럼 원본값을 계속 해서 복사하니깐 결국 원본값과 원본값+1만 나와야 하는거 아닌가요? 예를들어, 원본값의 quan:1 이고, +버튼을 누를경우 원본값을 복사해서 새로운 배열을 만들고 그 배열의 quan 값을 1증가 시켜서 2를 만든후 return을 하는거 까지는 이해 하는데 한번 더 버튼을 누르면 또 원본값을 복사해서 새로운 배열을 만들텐데 이때 원본값의 quan은 1이 아닌가요? 그럼 또 quan은 2가 되서 return이 되야하지 않나요?