beecomci / today_i_learned

0 stars 0 forks source link

[React-Basic-Hooks] 2. React Element & React Component #6

Open beecomci opened 3 years ago

beecomci commented 3 years ago

React Element

// React Element 생성
React.createElement(
  'div', // type
  { className: 'greeting' }, // props
  'Hello World!' // children
)

// 만든 결과
{
  type: 'div',
  props: {
    className: 'greeting',
    children: 'Hello World!'
  }
}
// with jsx
// 좀 더 선언적으로 보인다는 장점
const button = (
<button className='button button-blue'>
  <b>
    OK!
  </b>
</button>
);

// without jsx
const button = React.createElement(
  'button',
  { className: 'button button-blue' },
  React.createElement(
    'b',
    null,
    'OK!'
  )
);

React Component

function Button(props) {
  return (
    <button className={`button button-${props.color}`}>
      <b>
        {props.children}
      </b>
    </button>
  )
}

or

// 클릭했을 때 동작 같은 것들도 props로 설정 하고, 이벤트 핸들러를 붙이면 동작 가능
const Button = ({ color = 'blue', children = 'OK'}) => (
  <button className={`button button-${color}`}>
    <b>
      {children}
    </b>
  </button>
)
  <Button color='blue'>
    OK!
  </Button>
React.createElement(
  Button, // 위처럼 string이 아닌 component 정의를 넘김
  { color: 'blue' },
  'OK!'
);

// 만들어지는 객체 
{
  type: Button, // string이 아닌 객체를 가리킴
  props: {
    color: 'blue',
    children: 'OK!'
  }
}
// destructuring X 
function Button(props) {
  return (
    <button className={`button button-${props.color}`}>
      <b>
        {props.children}
      </b>
    </button>
  )
}

// destructuring O
function Button({ color = 'blue', children = 'button }) {
  return (
    <button className={`button button-${color}`}>
      <b>
        {children}
      </b>
    </button>
  )
}