[React] React์˜ JSX์™€ Component

์œ ์ง„ยท2023๋…„ 10์›” 28์ผ

๋ฆฌ์•กํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
2/8

๐Ÿ“ JSX๋ž€?

JSX๋Š” JavaScript XML์˜ ์•ฝ์ž๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ฌธ๋ฒ•์  ํŽธ์˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ UI ๊ฐœ๋ฐœ์˜ ํŽธ์˜์„ฑ์„ ๋А๋ผ๊ฒŒ ํ•ด์ฃผ๋Š” JavaScript ๋ฌธ๋ฒ•์˜ ํ™•์žฅ๋ณธ์ด๋‹ค.
โœ” XML์€ HTML์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋งˆํฌ์—… ์–ธ์–ด



๐ŸŽฏ JSX์˜ ํŠน์ง•

  • HTML ํƒœ๊ทธ ๋‚ด์— JavaScript ์—ฐ์‚ฐ

  • class โ†’ className

  • ์Šคํƒ€์ผ์€ object์ด๋ฉฐ camelCase๋กœ ์ž‘์„ฑ

  • ๋‹ซ๋Š” ํƒœ๊ทธ ํ•„์ˆ˜ ex) <br />

  • ์ตœ์ƒ๋‹จ element๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋งŒ ์ž‘์„ฑ ๊ฐ€๋Šฅ, <div> ๋˜๋Š” <React.Fragment>๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ค์ œ ๋ Œ๋”๋ง ์‹œ์—๋Š” ๋Š” Fragment ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ๋งŒ ์ถœ๋ ฅ. <React.Fragment>๋Š” ๊ฐ„๋‹จํžˆ <> ๋กœ ํ‘œ๊ธฐ ๊ฐ€๋Šฅ.

  • JSX ์ฝ”๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— Babel์— ์˜ํ•ด์„œ Transcompile๋จ

const App = () => {
	return (
    	<div className="App">
        	<header>
            	<img src={logo} className="App-logo" alt="logo" />
                <h1>Welcome to React</h1>
            </header>
            <p style={{ color: 'blue', bakcgroundColor: 'black' }}>
            	Hello World
            </p>
        </div>
    )
}



๐Ÿ“ˆ JSX์˜ ์žฅ์ 

  1. ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ ํ–ฅ์ƒ
  2. ํ˜‘์—…์— ์šฉ์ดํ•˜๊ณ  ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  3. ๋ฌธ๋ฒ• ์˜ค๋ฅ˜์™€ ์ฝ”๋“œ๋Ÿ‰ ๊ฐ์†Œ






๐Ÿ“ Component๋ž€?

React์—์„œ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ตœ์†Œ๋‹จ์œ„๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ์ด์ž ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” UI ํ•จ์ˆ˜์ด๋‹ค.



๐ŸŽฏ Component์˜ ํŠน์ง•

  • Component์˜ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘

  • Class Component(ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ) / Function Component(ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ) ๋กœ ๋‚˜๋‰จ

    Class Component ํŠน์ง•

    1. Class ๊ฐœ๋…์ด ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” Java ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์นœ์ˆ™ํ•œ ํ˜•ํƒœ์ด๋‹ค.
    2. React์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • Controlled Component / Uncontrolled Component

  • ์ปดํฌ๋„ŒํŠธ์— Attribute์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ Props(Properties)๋ผ๊ณ  ํ•œ๋‹ค. ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์ž‘์„ฑ๋œ ํ•˜์œ„ Element๋Š” children๋ผ๊ณ  ํ•˜๋Š”๋ฐ children๋„ ๊ฒฐ๊ตญ์—” props ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

  • ์—˜๋ฆฌ๋จผํŠธ๋ž€ React ์•ฑ์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ์ด๋‹ค. ์—˜๋ฆฌ๋จผํŠธ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๊ฒƒ๋“ค์„ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด HTML ์š”์†Œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.



Class Component(ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ)์™€ Function Component(ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ)

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ

function Introduce() {
  return <h2>Hi, I am elice!</h2>;
}

ReactDOM.render(<Introduce />, document.getElementById('root'));
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹จ์ˆœํžˆ HTML UI๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž๋ฐ”์Šคํฌ๋ฆผํŠธ ํ•จ์ˆ˜๋กœ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ณ  ๋ Œ๋”๋ง์„ ํ•˜๋ฉด ๋์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น„์ƒํƒœํ˜• ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • State๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, State๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฌผ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฐ์ฒด์ด๋‹ค. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ์— ํ˜„์žฌ ์ €์žฅ๋œ ๊ฐ’์ด State์ด๋‹ค.

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ

class Introduce extends React.Component {
  render() {
    return <h2>Hi, I am elice!</h2>;
  }
}

ReactDOM.render(<Introduce />, document.getElementById('root'));
  • ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜์–ด ์ƒํƒœํ˜• ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•œ๋‹ค. HTML์„ ๋ฐ˜ํ™˜ํ•˜๋Š” render() ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด, ๋ณต์žกํ•œ UI ๋กœ์ง์„ ๊ตฌํ˜„ํ•  ๋•Œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ํŠนํžˆ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ State๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด์•ผ ํ•œ๋‹ค.

โ—โ— React 16.8 ๋ฒ„์ „๋ถ€ํ„ฐ Function Component์—์„œ Hook์„ ํ†ตํ•ด State๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ“ˆ Component ๊ตฌ์กฐ์˜ ์žฅ์ 

  • ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋งŒ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ ์—ฐ์‚ฐ ๋น„์šฉ์„ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.



profile
๋„๋ผ์—๋ชฝ ์•”๊ธฐ๋นต

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