Zoeeey
Stack flows in you
Zoeeey
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • CS
  • Ajax
  • CSS
  • 프로그래머스
  • state
  • UXUI
  • axios
  • redux
  • JavaScript
  • useEffect
  • 오류
  • json
  • object
  • 삼항연산자
  • react
  • TypeScript
  • Props
  • class
  • array
  • 코딩애플
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
Zoeeey

Stack flows in you

⚛️ React/문제풀기 (코딩애플: React)

React : 장바구니 제품 수량변경 (map, redux, action, payload)

2023. 6. 22. 14:32

조건

map으로 data를 불러온 장바구니 테이블에서 수량변경 버튼을 누르면,
array에서 누른 버튼 옆에 있는 상품과 id값이 같은 상품을 찾아서 count값을 1 플러스 연산한다.


풀이

component.js

<tbody>
  {
    state.cart.map((a, i)=>
      <tr key={i}>
        <td>{ state.cart[i].id }</td>
        <td>{ state.cart[i].name }</td>
        <td>{ state.cart[i].count }</td>
        <td>
          <button onClick={()=>{ dispatch(changeCount(state.cart[i].id)) }}>➕</button>
        </td>
      </tr>
    )
  }
</tbody>

store.js

let cart = createSlice({
    name : 'cart',
    initialState : [
        {id : 0, name : 'White and Black', count : 2},
        {id : 2, name : 'Grey Yordan', count : 1}
    ] ,
    reducers : {
        changeCount(state, action) {
            const clickedItemId = action.payload;
            const clickedItem = state.find(item => item.id === clickedItemId);
            clickedItem.count += 1;
        }
    }
})

더 간단하게

component.js

<tbody>
  {
    state.cart.map((item, index) => 
      <tr key={index}>
        <td>{item.id}</td>
        <td>{item.name}</td>
        <td>{item.count}</td>
        <td>
          <button onClick={() => { dispatch(changeCount(item.id)) }}>➕</button>
        </td>
      </tr>
    )
  }
</tbody>

알게 된 점

  • store.js 파일에서 changeCount 리듀서의 action.payload 값은 onClick={() => { dispatch(changeCount(item.id)) }}에서 전달된 item.id와 연결된다.
  • map으로 데이터 뿌릴 때 state.cart[i].name 말고 map에 매개변수로 전달한 item으로 item.name처럼 쉽게 써도 된다.
  • const clickedItem = state.find(item => item.id === clickedItemId);
    이 배열 find 함수에서 item은 find 하려는 배열(state)의 각 요소 객체 전체다.

출처 : 코딩애플 https://codingapple.com/

저작자표시 비영리 동일조건 (새창열림)

'⚛️ React > 문제풀기 (코딩애플: React)' 카테고리의 다른 글

React : 최근 본 상품 만들기 (localStorage, map, JSON)  (0) 2023.07.03
React : 상품을 장바구니에 추가하기 (immer, redux, action, payload)  (0) 2023.06.30
React : 탭 내용 fade되도록 만들기 (+class에 변수 넣기)  (0) 2023.06.15
React : 탭 만들기 (if else, array로 만들기) + props 귀찮을 때 팁  (0) 2023.06.12
React : 더보기 버튼을 누를 때마다 다른 get주소 데이터 불러오기 (+로딩중)  (0) 2023.06.01
    '⚛️ React/문제풀기 (코딩애플: React)' 카테고리의 다른 글
    • React : 최근 본 상품 만들기 (localStorage, map, JSON)
    • React : 상품을 장바구니에 추가하기 (immer, redux, action, payload)
    • React : 탭 내용 fade되도록 만들기 (+class에 변수 넣기)
    • React : 탭 만들기 (if else, array로 만들기) + props 귀찮을 때 팁
    Zoeeey
    Zoeeey
    길게 생각하고 짧게 그리기

    티스토리툴바