티스토리 뷰

TIL

(React_9기)사전캠프 5주차 - 금

ImJaeOne 2024. 12. 20. 16:52

4주차와 5주차는 시험기간이라 팀 활동에 참여를 잘 못하고 코딩테스트만 간간히 풀었네요...

그래도 마지막 팀 프로젝트에는 참여할 수 있어서 너무 다행이었습니다...!

이번에 팀  프로젝트로 스타벅스 주문 시스템 구현해봤습니다.

🥤스타벅스 주문 시스템

 

저는 todo-1을 제외한 js와 주문 내역 부분 css를 맡아서 했습니다...ㅎㅎ

 

1. 주문 추가

menuContainer.addEventListener('click', (event) => {
        if (event.target.tagName === 'BUTTON') {
            let addMenu = menu[event.target.getAttribute('data-index')];
            if (order[addMenu.name] === undefined) {
                order[addMenu.name] = {
                    price: addMenu.price,
                    quantity: 1,
                };
            } else {
                order[addMenu.name].quantity += 1;
            }
            totalPrice += addMenu.price;
        }
        console.log(order);
        updateOrderList();
    });

 

맨 처음에 order라는 배열에 예를 들어 아메리카노가 들어있지 않으면 추가해줍니다.
만약 아메리카노가 이미 있다면 수량만 늘려주는 식으로 구현했습니다.

2. 주문 내역

    function updateOrderList() {
        orderList.innerHTML = '';
        for (let itemName in order) {
            const orderItem = order[itemName];
            const menuItem = menu.find((item) => item.name === itemName);
            const orderItemElement = document.createElement('li');
            orderItemElement.innerHTML = `
              <div class="item-order">
              <img class="item-img" src="${menuItem.image}" alt="${itemName}">
              <div class="item-info">
                  <div>${itemName}</div>
                  <div>₩${orderItem.price.toLocaleString()}</div>
                  <div class="item-quantity">
                      <button class="quantity-down" data-item="${itemName}">-</button>
                      ${orderItem.quantity}
                      <button class="quantity-up" data-item="${itemName}">+</button>
                  </div>
              </div>
          </div>
          `;
            orderList.appendChild(orderItemElement);
        }
        totalPriceElement.textContent = totalPrice.toLocaleString();
    }

 

기본 양식에서 추가된 부분은 주문 내역에서도 수량 변경이 가능하게 만들었고 메뉴 이미지도 들어가도록 구현했습니다.

3.  주문 내역 삭제

orderList.addEventListener('click', (event) => {
        const itemName = event.target.getAttribute('data-item');
        console.log(order);
        if (event.target.classList.contains('quantity-up')) {
            console.log('up');
            order[itemName].quantity += 1;
            totalPrice += order[itemName].price;
            updateOrderList();
        } else if (event.target.classList.contains('quantity-down')) {
            if (order[itemName].quantity === 1) {
                console.log('delete');
                totalPrice -= order[itemName].price;
                delete order[itemName];
            } else {
                console.log('down');
                order[itemName].quantity -= 1;
                totalPrice -= order[itemName].price;
            }
            updateOrderList();
        }
    });

 

기존에 있던 삭제 버튼 대신에 +와 -버튼을 통해 수량 조절을 가능하게 만들었기 때문에 이 로직 또한 변경해주었습니다.

기존 로직은 메뉴를 삭제하는 버튼이었기 때문에 수량이 1인 상태에서 -를 눌렀을 경우에 그대로 넣어주었습니다.

 


 

KPT 회고

 

1. Keep

  • 팀 프로젝트를 진행하기 전에 회의를 통해 역할을 분담
  • 모르는 부분이 있으면 화면 공유를 통해 알아가기

2. Problem

  • 팀원마다 학습을 하는 데 속도가 있는데 무작정 프로젝트를 하려 하니 문제가 생김

3. Try

  • 학습 속도가 빠른 사람은 학습을 다 마친 뒤 내용 정리 후 알려줌
  • 널널한 시간...

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함