React :: JSX์™€ props

s_omiยท2021๋…„ 11์›” 23์ผ
0

React (๋ฆฌ์•กํŠธ)

๋ชฉ๋ก ๋ณด๊ธฐ
5/6
post-thumbnail

๐Ÿ“ JSX

๐Ÿ’ฌ ๋ฆฌ์•กํŠธ์—์„œ ์ƒ๊น€์ƒˆ๋ฅผ ์ •์˜ํ•  ๋•Œ, ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•

๐Ÿ’ก JSX๊ฐ€ JacaScript๋กœ ๋ณ€ํ™˜ ์‹œ, ์ง€์ผœ์•ผ ํ•  ๊ทœ์น™

๐Ÿ’ฌ ํƒœ๊ทธ๋Š” ๊ผญ ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค.

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    <div>
      <Hello />
      <Hello />
      <Hello />
      <br>      // error 
      <br /> 
    </div>
  );
}

export default App;

๐Ÿ’ฌ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํƒœ๊ทธ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ์•ผ ํ•œ๋‹ค.

import React from 'react';
import Hello from './Hello';

function App() {
  return (
    // error
    <Hello />
    <div>์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”.</div>
    
    // <div>๋กœ ๊ฐ์‹ธ๊ธฐ 
    <div>
      <Hello />
      <div>์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”</div>
    </div>
    
    // <>๋กœ ๊ฐ์‹ธ๊ธฐ 
    <>
      <Hello />
      <div>์•ˆ๋…•ํžˆ๊ณ„์„ธ์š”</div>
    </>
  );
}

export default App;

๐Ÿ’ก JSX ๋‚ด๋ถ€์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ’ ์‚ฌ์šฉ

๐Ÿ’ฌ {} ์œผ๋กœ ๊ฐ์‹ธ๊ธฐ

import React from 'react';
import Hello from './Hello';

function App() {
  const name = 'react';
  return (
    <>
      <Hello />
      <div>{name}</div>
    </>
  );
}

export default App;

๐Ÿ’ก style ๊ณผ className

๐Ÿ’ฌ ์ธ๋ผ์ธ ์Šคํƒ€์ผ : ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ž‘์„ฑ, camelCase ํ˜•ํƒœ๋กœ ๋„ค์ด๋ฐ

function App() {
  const name = 'react';
  const style = {
    backgroundColor: 'black',   // backgroundColor : camelCase ํ˜•ํƒœ์˜ ๋„ค์ด๋ฐ
    color: 'aqua',
    fontSize: 24,               // ๊ธฐ๋ณธ ๋‹จ์œ„ px
    padding: '1rem'             // ๋‹ค๋ฅธ ๋‹จ์œ„ ์‚ฌ์šฉ ์‹œ ๋ฌธ์ž์—ด๋กœ ์„ค์ •
  }

  return (
    <>
      <Hello />
      <div style={style}>{name}</div>
    </>
  );
}

๐Ÿ’ฌ CSS class ์„ค์ • : 'className='์œผ๋กœ ์„ค์ •

... 

  return (
    <>
      <Hello />
      <div style={style}>{name}</div>
      <div className="gray-box"></div>   // className=
    </>
  );
}

๐Ÿ’ก ์ฃผ์„

๐Ÿ’ฌ //

๐Ÿ’ฌ {/ ... /}

๐Ÿ“ props

๐Ÿ’ก props

๐Ÿ’ฌ ์–ด๋– ํ•œ ๊ฐ’์„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•  ๋•Œ, ์‚ฌ์šฉ

๐Ÿ’ก props ์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

// App.js

function App() {
  return (
    <Hello name="World" />
  );
}
// Hello.js

function Hello(props) { 
  return <div>Hello, {props.name}</div>    // Hello, World
}

๐Ÿ’ก ์—ฌ๋Ÿฌ ๊ฐœ์˜ props, ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น

// App.js

function App() {
  return (
    <Hello name="react" color="red"/>
  );
}
// Hello.js

// ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ์‚ฌ์šฉ X 
function Hello(props) { 
  return <div style={{ color: props.color }}>Hello, {props.name}</div>   // Hello, react 
}

// ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ์‚ฌ์šฉ O
function Hello({ color, name }) {
  return <div style={{ color }}>Hello, {name}</div> // Hello, react 
}

export default Hello;

๐Ÿ’ก defaultProps ๋กœ ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •

๐Ÿ’ฌ ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ฏธ์ง€์ •์ผ ๋•Œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ปดํฌ๋„ŒํŠธ์— defaultProps ๋ผ๋Š” ๊ฐ’์„ ์„ค์ •

// Hello.js

function Hello({ color, name }) {
  return <div style={{ color }}>Hello, {name}</div>
}

Hello.defaultProps = {
  name: '์ด๋ฆ„์—†์Œ'
}
// App.js

function App() {
  return (
    <>
      <Hello name="react" color="red"/>   // ์•ˆ๋…•ํ•˜์„ธ์š” react 
      <Hello color="pink"/>               // ์•ˆ๋…•ํ•˜์„ธ์š” ์ด๋ฆ„์—†์Œ
    </>
  );
}

export default App;

๐Ÿ’ก props.children

๐Ÿ’ฌ ์ปดํฌ๋„ŒํŠธ ํƒœ๊ทธ ์‚ฌ์ด์— ๋„ฃ์€ ๊ฐ’์„ ์กฐํšŒ

// Wrapper.js
// props.children์„ ๋ Œ๋”๋งํ•ด์•ผ ๋‚ด๋ถ€์˜ ๋‚ด์šฉ์ด ๋ณด์ž„

function Wrapper({ children }) {
  const style = {
    border: '2px solid black',
    padding: '16px',
  };
  return (
    <div style={style}>
      {children}
    </div>
  )
}
// App.js

function App() {
  return (
    <Wrapper>
      <Hello name="react" color="red"/>   // ์•ˆ๋…•ํ•˜์„ธ์š” react 
      <Hello color="pink"/>               // ์•ˆ๋…•ํ•˜์„ธ์š” ์ด๋ฆ„์—†์Œ
    </Wrapper>
  );
}

Reference

๋ฒจ๋กœํผํŠธ์™€ ํ•จ๊ป˜ํ•˜๋Š” ๋ชจ๋˜ ๋ฆฌ์•กํŠธ

profile
๊ณต๋ถ€ํ•œ ๊ฑฐ ์˜ฌ๋ ค์š” :)

0๊ฐœ์˜ ๋Œ“๊ธ€