๐Ÿฑ #4 React.js - Component, props

๋ฐ•์ค€์„ยท2022๋…„ 10์›” 18์ผ
1

React

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

๐Ÿงฉ Component

Component์˜ ์‚ฌ์ „์  ์ •์˜๋Š” ๋…๋ฆฝ์ ์ด๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋น„ํŠธ์ด๋‹ค. Javascript ํ•จ์ˆ˜์™€ ๋™์ผํ•œ ๋ชฉ์ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ถ„๋ฆฌ๋˜์–ด ์ž‘๋™ํ•˜๊ณ  HTML์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Component๋Š” ํด๋ž˜์Šค ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•จ์ˆ˜ ๊ตฌ์„ฑ์š”์†Œ์˜ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ์ œ๊ณต๋˜๋ฉฐ ์ด ์ž์Šต์„œ์—์„œ๋Š” ํ•จ์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์ง‘์ค‘ํ•œ๋‹ค.

์‚ฌ์ „์  ์ •์˜๋ง๊ณ  ์ด์ œ Component๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด์ž.

๊ธฐ์กด ์šฐ๋ฆฌ๊ฐ€ ๋ฐ•์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด.

<div>
      <div className='box'>
        box1
        <p>๋‚˜๋Š” ๋ฐ•์Šค.</p>
      </div>
</div>
.box{
  width: 100px;
  height: 100px;
  border: 1px solid red;
}

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ช‡๊ฐœ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ 3๋ฒˆ์„ ์ž…๋ ฅํ•ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ๋ฅผ Component๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์—„์ฒญ ํŽธ๋ฆฌํ•ด์ง„๋‹ค.

ํ˜„์žฌ ์ž‘์—…ํ•˜๋Š” ํด๋”์— jsํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒˆ๋กœ๋งŒ๋“ ๋‹ค. ๋งŒ๋“  jsํŒŒ์ผ์— ๋ฐ•์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด ์˜ฎ๊ฒจ ๋‹ด๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Box.jsํŒŒ์ผ์— ๋„ฃ์–ด๋ณธ๋‹ค.

์—ฌ๊ธฐ์„œ ํŒŒ์ผ์„ ๋„ฃ๊ธฐ์ „์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค. rafce๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜จ๋‹ค.

import React from 'react'
const Box = () => {
  return (
    <div>Box</div>
  )
}
export default Box

โŒ ๋งŒ์•ฝ ๋‹จ์ถ•ํ‚ค๊ฐ€ ์•ˆ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋Š” extention๋ฅผ ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค.

โŒ ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค ์‹œ ์ฃผ์˜์‚ฌํ•ญ
์ปดํฌ๋„ŒํŠธ์˜ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•ด์•ผํ•œ๋‹ค.
๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜์ง€๋งˆ ์•Š์œผ๋ฉด HTMLํƒœ๊ทธ๋กœ ๋ถ„๋ฅ˜ํ•ด ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ์ด๋ฅดํ‚จ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๊ฐ€ ๋‚˜์™”๋‹ค๋ฉด ์•„๊นŒ ์ฒ˜์Œ ๋งŒ๋“ค์—ˆ๋˜ HTMLํƒœ๊ทธ๋“ค์„ ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค.

import React from 'react'

const Box = () => {
  return (
    <div className='box'>
        box1
        <p>๋‚˜๋Š” ๋ฐ•์Šค.</p>
    </div>
  )
}

export default Box

์œ„ Box.jsํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ App.jsํŒŒ์ผ์— ์™€์„œ ์ œ์ผ ์œ„์— import Box from './component/Box';๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Box.jsํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค.

๊ทธ ์ดํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

function App() {
  return (
    <div>
      <Box/>
      <Box/>
      <Box/>
    </div> //jsx ์‹ ํƒ์Šค์—์„œ ์ฃผ์˜ํ• ์ . ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผํ•œ๋‹ค.
  );
}

์ด๋ ‡๊ฒŒ Component๋กœ ์‰ฝ๊ฒŒ ๋ฐ•์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ž ๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฐ•์Šค ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜. App.js์— name๊ฐ’๊ณผ num๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

import './App.css';
import Box from './component/Box';

function App() {
  return (
    <div>
      <Box name="๋‚œ ๋ฐ•์Šค1" num={1}/>
      <Box name="๋‚œ ๋ฐ•์Šค2" num={2}/>
      <Box name="๋‚œ ๋ฐ•์Šค3" num={3}/>
    </div> //jsx ์‹ ํƒ์Šค์—์„œ ์ฃผ์˜ํ• ์ . ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผํ•œ๋‹ค.
  );
}

export default App;

๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ Box.js ํŒŒ์ผ๋กœ ๊ฐ€์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

import React from 'react'

const Box = (props) => { //props๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์กด์žฌ์ด๋‹ค.
  return (
    <div className='box'>
        Box{props.num} //props์˜ num๊ฐ’์„ ๋ฐ›๋Š”๊ฒƒ์ด๋‹ค.
        <p>{props.name}</p>
    </div>
  )
}

export default Box

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋œฌ๋‹ค.

๐Ÿงฉ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”..

  • ๋ฐ˜๋ณต์ด ๋˜๋Š” ๋ถ€๋ถ„
    ๋ฆฌ์ŠคํŠธ์˜ ์•„์ดํ…œ์ด๋ผ๋˜๊ฐ€ ๋ฐ˜๋ณต์ด ๋˜๋Š” UI์š”์†Œ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ์ข‹๋‹ค.

๐Ÿงฉ props

Props๋Š” React ๊ตฌ์„ฑ ์š”์†Œ์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ˆ˜์ด๋‹ค. props์€ HTML ์†์„ฑ์„ ํ†ตํ•ด ๊ตฌ์„ฑ ์š”์†Œ์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

  • App.js
import './App.css';
import Box from './component/Box';

function App() {
  return (
    <div>
      <Box name="๋‚œ ๋ฐ•์Šค1" num={1}/>
      <Box name="๋‚œ ๋ฐ•์Šค2" num={2}/>
      <Box name="๋‚œ ๋ฐ•์Šค3" num={3}/>
    </div> {/*jsx ์‹ ํƒ์Šค์—์„œ ์ฃผ์˜ํ• ์ . ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์•ผํ•œ๋‹ค.*/}
  );
}

export default App;
  • box.js
import React from 'react'

const Box = (props) => { //props๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์กด์žฌ์ด๋‹ค.
  return (
    <div className='box'>
        Box{props.num} //props์˜ num๊ฐ’์„ ๋ฐ›๋Š”๊ฒƒ์ด๋‹ค.
        <p>{props.name}</p>
    </div>
  )
}

export default Box

Box ์ปดํฌ๋„ŒํŠธ์— name๊ณผ num์˜ ์†์„ฑ์„ ๋„ฃ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ด props์ด๋‹ค.
ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๊ฐ™์€ ์กด์žฌ์ธ ๊ฒƒ ์ด๋‹ค. ๊ทธ๋ž˜์„œ props๋กœ ์ธํ•ด ๋‹ค์ด๋‚˜๋ฏน ํ•œ ๊ฐ’์„ ์ง€์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ด๋‹ค. props.num์€ Box ์ปดํฌ๋„ŒํŠธ์— ํ• ๋‹นํ•œ num์†์„ฑ ๊ฐ’์ด ์ง€์ • ๋˜๋Š” ๊ฒƒ์ด๊ณ  props.name์€ Box ์ปดํฌ๋„ŒํŠธ์— ํ• ๋‹นํ•œ name๊ฐ’์ด ์ €์ • ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๊ธ€์„ ์ด์ „ ์ค‘์ž…๋‹ˆ๋‹ค.

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