function ExpenseItem() {
return <h2>Expense item!</h2>;
}
export default ExpenseItem;
import ExpenseItem from './components/ExpenseItem';
function App() {
return (
<div>
<h2>Let's get started!</h2>
<ExpenseItem></ExpenseItem>
</div>
);
}
import './ExpenseItem.css';
function ExpenseItem() {
return (
<div className="expense-item">
<div>March 28th 2021</div>
<div className="expense-item__description">
<h2>Car Insurance</h2>
<div className="expense-item__price">$294.67</div>
</div>
</div>
);
}
function ExpenseItem() {
const expenseDate = new Date(2021, 2, 28);
const expenseTitle = 'Car Insurance';
const expenseAmount = 294.67;
return (
<div className='expense-item'>
<div>{expenseDate.toISOString()}</div>
<div className='expense-item__description'>
<h2>{expenseTitle}</h2>
<div className='expense-item__price'>${expenseAmount}</div>
</div>
</div>
);
}
App.js (변수 전달)
function App() {
const expenses = [
{
id: 'e1',
title: 'Toilet Paper',
amount: 94.12,
date: new Date(2020, 7, 14),
},
{ id: 'e2', title: 'New TV', amount: 799.49, date: new Date(2021, 2, 12) },
{
id: 'e3',
title: 'Car Insurance',
amount: 294.67,
date: new Date(2021, 2, 28),
},
{
id: 'e4',
title: 'New Desk (Wooden)',
amount: 450,
date: new Date(2021, 5, 12),
},
];
return (
<div>
<h2>Let's get started!</h2>
<ExpenseItem
title={expenses[0].title}
amount={expenses[0].amount}
date={expenses[0].date}
></ExpenseItem>
<ExpenseItem
title={expenses[1].title}
amount={expenses[1].amount}
date={expenses[1].date}
></ExpenseItem>
<ExpenseItem
title={expenses[2].title}
amount={expenses[2].amount}
date={expenses[2].date}
></ExpenseItem>
<ExpenseItem
title={expenses[3].title}
amount={expenses[3].amount}
date={expenses[3].date}
></ExpenseItem>
</div>
);
}
ExpenseItem.js
: props로 한 번에 전달 받는다.
function ExpenseItem(props) {
return (
<div className='expense-item'>
<div>{props.date.toISOString()}</div>
<div className='expense-item__description'>
<h2>{props.title}</h2>
<div className='expense-item__price'>${props.amount}</div>
</div>
</div>
);
}
import './ExpenseDate.css';
function ExpenseDate(props) {
const month = props.date.toLocaleString('en-US', { month: 'long' });
const day = props.date.toLocaleString('en-US', { day: '2-digit' });
const year = props.date.getFullYear();
return (
<div className="expense-date">
<div className="expense-date__month">{month}</div>
<div className="expense-date__year">{year}</div>
<div className="expense-date__day">{day}</div>
</div>
);
}
export default ExpenseDate;
components > Expenses.js
import ExpenseItem from './ExpenseItem';
import './Expenses.css';
function Expenses(props) {
return (
<div className="expenses">
<ExpenseItem
title={props.items[0].title}
amount={props.items[0].amount}
date={props.items[0].date}
/>
<ExpenseItem
title={props.items[1].title}
amount={props.items[1].amount}
date={props.items[1].date}
/>
<ExpenseItem
title={props.items[2].title}
amount={props.items[2].amount}
date={props.items[2].date}
/>
<ExpenseItem
title={props.items[3].title}
amount={props.items[3].amount}
date={props.items[3].date}
/>
</div>
);
}
export default Expenses;
App.js
<Expenses items={expenses} />
.card {
border-radius: 12px;
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.25);
}
components > Card.js
import './Card.css';
function Card(props) {
return <div className=card></div>;
}
export default Card;
components > ExpenseItem.js
function ExpenseItem(props) {
return (
<Card className='expense-item'>
<ExpenseDate date={props.date} />
<div className='expense-item__description'>
<h2>{props.title}</h2>
<div className='expense-item__price'>${props.amount}</div>
</div>
</Card>
);
}
이렇게 되면 화면에 아무것도 안 뜨고 card.css 디자인만 뜬다.
밑에 요소들 + 매개변수까지 잡아주도록 card.js를 다음과 같이 수정해야 함.
components > Card.js
function ExpenseItem(props) {
return (
<Card className='expense-item'>
<ExpenseDate date={props.date} />
<div className='expense-item__description'>
<h2>{props.title}</h2>
<div className='expense-item__price'>${props.amount}</div>
</div>
</Card>
);
}