장바구니에 있는 모든 상품들을 주문하기
input:
장바구니에 있는 모든 상품들을 선택했는가?
버튼이 작동하는지?
버튼을 누르면 선택 상품들을 서버로 보낸다.
output:
데이터 양식
<button onClick={this.giveItemList}>전체상품주문</button>
함수를 만들기 전에, 우리는 버튼을 클릭하면 장바구니 안에 있는 Data들을 서버로 전달해 주어야한다는 점을 생각해볼 수 있습니다. (장바구니(나) -> 서버(득영님) -> 결제(종호님))
그럼 어떤 데이터들을 넘겨줘야 할까요?
이럴 때에는 결제창에서 어떤 data를 받아야 하는지를 보며 넘겨줄 데이터를 생각해볼 수 있습니다.
위의 사진은 도프트앤더프트의 장바구니
위의 사진은 결제 페이지의 주문상품 페이지 입니다.
두 상품에 있는 img, 가격 등은 서버에서 내용을 불러올 수 있습니다.
우리가 결제창에 전달해줄 요소는 바로 고객이 선택한 상품의 id와 수량 입니다.
<script>
giveItemList = () => {
// console.log('click'); 버튼이 작동하는지 확인
let newOrderList = this.state.orderList.map(order => {
return {
id: order.id,
count: order.count,
};
});
}
//console.log(newOrderList);
</script>
map()
을 이용하여 전달해준다. map할 배열 안의 객체는 id, count(수량)을 전달해준다.<script>
fetch('http://localhost:8000/carts', {
method: 'POST',
body: {
orderList: newOrderList,
},
})
.then(res => res.json())
.then(data => {
// { MESSAGE: SUCCESS } 와 같은 back에서 보내는 메세지가 뜨는 것
console.log(data);
});
};
</script>
POST
메서드를 사용하여 orderList
에 새로 만든 newOrderList
를 넣어주었습니다..then(data => {console.log(data);}
가 있어서 어떤 데이터를 log하는지 궁금했습니다. 그런데 알고보니 두번째 then의 console.log는 back에서 데이터를 전달받았을 때 성공했는지, 안했는지 등의 메세지를 정하여 보내주는 것을 말하는 것이었다.🍒 data 전달 전체 코드 모아보기
<script>
class Basket extends Component {
constructor() {
super();
this.state = {
orderList: [],
};
}
giveItemList = () => {
let newOrderList = this.state.orderList.map(order => {
return {
id: order.id,
count: order.count,
};
})
console.log(newOrderList);
fetch('http://10.5.30.109:8000/products/basket', {
method: 'POST',
body: {
orderList: newOrderList,
},
})
.then(res => res.json())
.then(data => {
console.log(data);
});
};
}
</script>