[ #1 ] Props란?

1. props

오늘은 props 에 대하여 배웠다. custom component에 값들을 전송할때 해당 태그안에 객체이름=value식으로 보낼 수 있으며 해당 컴포넌트에서는 보내어진 모든 객체들을 하나의 객체안에 몽땅 넣어서 전달한다.

Card.js 라는 Wrapper 컴포넌트를 만들면서 자세히 설명하도록 하겠다.


App.js

ExpensesItem 으로 expenses 객체 전달하기.

import ExpenseItems from "./components/ExpenseItems";
import './App.css';
function App() {
  const expenses = [
    {
      title: "Toilet Paper",
      amount: 94.67,
      date: new Date(2021, 2, 21),
    },
    {
      title: "New Tv",
      amount: 1294.67,
      date: new Date(2021, 2, 21),
    },
    {
      title: "Car insuarnce",
      amount: 294.67,
      date: new Date(2021, 2, 21),
    },
    {
      title: "Macbook pro",
      amount: 2294.67,
      date: new Date(2021, 2, 21),
    },
  ];
  return (
    <div className="main">
      <ExpenseItems expenses={expenses}/>
    </div>
  );
}

export default App;

ExpenseItems.js

expenses를 통으로 보낼경우 객체 안-> 객체 안 -> 정보를 얻으므로 복잡함을 줄이기 위해 expenses destructuring 하여 각각의 정보 개별 ExpenseItem으로 전달한다

import React from "react";
import ExpenseItem from "./ExpenseItem";
function ExpenseItems(props) {
  const expenses = props.expenses.map(({ title, amount, date }) => {
    return <ExpenseItem title={title} amount={amount} date={date} />;
  });

  return <Exp className='expensesitem'>{expenses}</Exp>;
}

export default ExpenseItems;

ExpenseItem.js

App -> ExpenseItems -> ExpensesItem 으로 전달받은 prop값으로 태그 찍어내주기

import React from "react";
import ExpenseDate from "./ExpenseDate";
import "./ExpenseItem.css";
function ExpenseItem(props) {
  return (
    <div 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>
    </div>
  );
}

export default ExpenseItem;

2.Custom tag

기본적인 HTML 태그의 경우 className = “name” 지정하면 css파일의 스타일이 적용이 된다. 하지만 custom component의경우는 다르다.
예를 들어서

className in customized tags


<Custom className="class"/> 

이러한 커스텀 태그가 있을때, 여기서 className 은 일번적인 태그에 들어가는 className이 아니라 props 로 전송되는 객체중의 하나이므로 css의 스타일이 적용 되지 않는것이다.