inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

리액트 장바구니 총 합계 금액 계산 함수 어떻게 해야할까요?

340

ㄴㄹㅇㄹㄴㄹㅇ

작성한 질문수 6

0

const Order = () => {
  const orders = useOrders();
  const { books } = useBooks();
  const { remove, removeAll, addToOrder } = useActions();
  const [count,setCount] = useState(1);
 const totalPrice =  useMemo(() => {
  
  return orders.map((order) => {
      const { isbn, quantity } = order;
      const book = books.find((b) => b.isbn === isbn);
      return book.sale_price * quantity ;
    })
    .reduce((l, r) => l + r, 0);
}, [orders, books]);

다른 컴포넌트와 hooks 에서 받아온 함수로 총액 계산을 하는데 (totalPrice)

해당 컴포넌트에서 아래처럼 권수를 변경할 수 있는 함수를 만들었습니다.

return(

{book.title} {order.quantity} 권 <button onClick={() => setCount(order.quantity ++)} >+</button> <button onClick={() => setCount(order.quantity --)} >-</button> </div>

)

여기서 변경된 권수의 금액으로 총액도 변경하게 하고 싶은데 어떻게 함수를 만들어야 할까요...?

 

리액트 자바스크립트 계산

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

권수 변경 시 총 합계 금액 또한 실시간으로 변경되게 하고 싶다면, order.quantity의 변화를 orders 상태에 반영해야 합니다. setCount를 사용하여 로컬 상태를 변경하는 것이 아니라, orders 배열의 해당 아이템의 수량을 변경하는 함수를 만들어서 사용하셔야 합니다.

예를 들어, 수량을 증가시키는 함수와 감소시키는 함수는 다음과 같이 구현할 수 있습니다:

const increaseQuantity = (isbn) => {
  const newOrders = orders.map((order) => {
    if (order.isbn === isbn) {
      return { ...order, quantity: order.quantity + 1 };
    }
    return order;
  });
  // 로직을 통해 orders 상태 업데이트
  setOrders(newOrders);
};

const decreaseQuantity = (isbn) => {
  const newOrders = orders.map((order) => {
    if (order.isbn === isbn && order.quantity > 0) {
      return { ...order, quantity: order.quantity - 1 };
    }
    return order;
  });
  // 로직을 통해 orders 상태 업데이트
  setOrders(newOrders);
};

그리고 버튼의 onClick 이벤트에 이 함수들을 적용합니다:

return (
  <div>
    {book.title} {order.quantity} 권
    <button onClick={() => increaseQuantity(order.isbn)} >+</button>
    <button onClick={() => decreaseQuantity(order.isbn)} >-</button>
  </div>
)

이렇게 하면, 각각의 버튼을 클릭할 때마다 해당 orderquantity가 변경되고, 이 변경 사항이 orders 배열에 반영됩니다. 그 결과 useMemo로 계산되는 totalPrice도 자동으로 업데이트 될 것입니다.

주의하실 점은 setOrders와 같은 상태 업데이트 함수는 해당 컴포넌트 내부 또는 관련 커스텀 훅에서 정의되어야 한다는 것입니다. setCount 함수 대신 orders 배열의 상태를 직접 업데이트하는 로직으로 접근하세요.

자바스크립트 함수가 실행되지 않습니다.

0

492

2

섹션1 : 시작은 프리캠프 final 과제 타이머 부분 JS 문의

0

465

1

코드가 실행이 안 됩니다

0

395

1

HTML 태스 선택하기 자손 자식 태그 질문드립니다.

0

371

1

해당 강의를 듣고 나면

0

404

1

document.querySelectorAll 질문드립니다

0

385

1

별 찍기 질문입니다.

0

424

1

중첩 반복문 질문

0

277

1

자바스크립트 반복문(for) 질문

0

374

1

자바스크립트 변수 선언하기(let) 질문

0

342

1

자바스크립트 문자열 질문

0

319

1

렌더링 차이

0

483

1

counter 변수도 초기값이 없으면 널이 되더라구요.

1

427

1

버튼을 누를 때마다 매번 Form() 을 호출하는 걸까요?

2

359

2

쌤 리액트로 앱 만들수 있는건가요?

0

329

0

const title =<h1>제목</h1>; 에는 괄호가 없어도 되네요?

3

310

2

자바스크립트 오타 검사 질문

0

577

1

리액트 관련 서버 구축 중 server파일에서 발생한 오류

0

282

0

자바스크립트 코드 실행

0

309

0

강의 7:41 삼항연산자 왜쓰는건가요?

0

680

1

img태그의 src=로컬호스트/이미지 이 부분 질문있습니다!

1

1536

1

state에서 count값 올릴때 +와 ++차이점이 궁금합니다

0

724

1

Create React App에서 node_modules파일 지워졌을 경우

0

1950

1

todolist filter함수 이해가 안가요ㅜㅜ도와주세요..

0

400

2