본문 바로가기
App/React Native

[React Native] 아이템 주문목록에 담기

by Wordbe 2020. 12. 7.
728x90

React Native 103 - 주문로직

장바구니에 있는 아이템은 '바로주문' 버튼을 누르면 '주문목록' 에 담긴다.

장바구니 아이템들을 그대로 주문목록에 담아주면 된다.

리듀서와 액션을 만들어보자.

actions/orders.js


  
export const ADD_ORDER = 'ADD_ORDER';
export const addOrder = (cartItems, totalAmount) => {
return {
type: ADD_ORDER,
orderData: { items: cartItems, amount: totalAmount }
};
};

CartScreen 컴포넌트에서 데이터를 전달받은 액션함수는 items, amount 를 리듀서로 전달한다.

reducers/orders.js


  
import Order from '../../models/order';
import { ADD_ORDER } from '../actions/orders';
const initialState = {
orders: []
};
export default (state = initialState, action) => {
switch (action.type) {
case ADD_ORDER:
const newOrder = new Order(
new Date().toString(),
action.orderData.items,
action.orderData.amount,
new Date()
);
return {
...state,
orders: state.orders.concat(newOrder)
};
}
return state;
};

액션 유형이 ADD_ORDER 일 경우, 주문 데이터를 객체에 담아서 원래 orders 배열에 concat 함수로 추가시킨다.

로직은 간단하다.

Order 객체를 만들 때 첫번쨰 파라미터는 id이다.

주문 id를 만드는 방법으로 주문한 시각을 키로 설정해주었다.


CartScreen.js


  
const CartScreen = (props) => {
...
return (
<View style={styles.screen}>
...
<Button
color={Colors.accent}
title="바로주문"
disabled={cartItems.length === 0}
onPress={() => {
dispatch(ordersActions.addOrder(cartItems, cartTotalAmount));
}}
/>
</View>
);
};

바로주문 버튼을 누르면 onPress 함수로 연결되어 액션함수 addOrder 를 호출한다. 이 때 카트아이템과 카트총금액을 담아서 보낸다.

728x90

댓글