• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 Redux 강의 중 reducer 함수 질문 드립니다.

Redux 강의 중 reducer 함수 질문 드립니다.

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #25957

    윤여송
    참가자

    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이 되야하지 않나요?

    #25980

    codingapple
    키 마스터

    리듀서 부를 때 마다 state는 초기값이 아니라 현재 state값이 됩니다 

    리듀서는 return한 값으로 state를 변경시켜버립니다

    #26000

    윤여송
    참가자

    감사합니다. 그러면 굳이 let copy = [...state]를 하는 이유는 뭔가요? 어차피 return한 값으로 원본은 바꾸는거 아닌가요?

    #26028

    codingapple
    키 마스터

    리액트가 return한 값이랑 기존값이랑 등호로 비교해서 달라졌는지 판단해서 그렇습니다 

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠