GiantStepDEV
article thumbnail

์ปดํฌ๋„ŒํŠธ?

  • UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.
  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์ฒด์ ์ธ UI์™€ ์ƒํƒœ(state)๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • props์™€ state๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , return๋ฌธ์—๋Š” UI์š”์†Œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    (React๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ DOM ํƒœ๊ทธ๋กœ ์ฒ˜๋ฆฌ ํ•จ)
props : ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ
state : ์ปดํฌ๋„ŒํŠธ ์ž์ฒด์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ, state๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์‹œ ๋ Œ๋”๋ง ๋จ.(โญ๏ธhook)

์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ตœ๊ทผ์—๋Š” ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ถ”์„ธ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„œ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊นŒ์š”?

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

  • props๋ฅผ ๋ฐ›์•„์™€ UI๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ, ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

props


props?
๐Ÿ”Ž property์™€ value๋ฅผ ๋ฐ›๋Š” ๋ฉ์–ด๋ฆฌ ๊ฐ์ฒด
๐Ÿ‘‰ property(์†์„ฑ)์˜ ์ค„์ž„๋ง๋กœ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ด๋ฆ„, ๋‚˜์ด, ์ด๋ฉ”์ผ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‰ props๋Š” ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง€๋ฏ€๋กœ, props๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๐Ÿ‘‰ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋งŒ๋“ค์–ด์ ธ์„œ ์•Œ์•„์„œ ๋ฐ›์Œ..(?

๊ธฐ๋ณธ ์˜ˆ์ œ

๐Ÿ”ท WelcomeProp ์ปดํฌ๋„ŒํŠธ๋Š” props๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ, name ์†์„ฑ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ท App ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” name ์†์„ฑ์— React ๊ฐ’์„ ์ „๋‹ฌํ•˜์—ฌ, WelcomeProp ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

import './App.css';

// ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” props๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด..(?)
function WelcomeProps(props) { // ์ปดํฌ๋„ŒํŠธ
  return <h1>Hello, {props.name} {props.age}์‚ด</h1>
}

function App() {
  const element = <WelcomeProps name="๊ณฐ๋Œ์ด์‚ฌ์œก์‚ฌ" age="10" /> // ์ž๋™์œผ๋กœ 'props' ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ์ƒ์„ฑ๋˜์–ด ์ „๋‹ฌ๋จ.

  return (
    <>
    <div>{element}</div>
    </>
  );
}

export default App;
import './App.css';

// ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐ€๋Š” props๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด..(?)
// ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ญ์ƒ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋ฐ˜ํ™˜๊ฐ’์€ UI ์š”์†Œ
function WelcomeProps(props) { // ์ปดํฌ๋„ŒํŠธ
  return <h1>{props.name} : {props.age}์‚ด</h1>
}

function App() {
// ์ž๋™์œผ๋กœ 'props' ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ์ƒ์„ฑ๋˜์–ด ์ „๋‹ฌ๋จ.
  return (
    <>
      <WelcomeProps name="ํ™๊ธธ๋™" age="18" />
      <WelcomeProps name="ํ•œ์„๋ด‰" age="22" />
    </>
  );
}

export default App;

์žฌ์‚ฌ์šฉ

import './App.css';

function WelcomeProp(props) {
  return <h1>Hello, {props.name}</h1>
}

function App() {
  return (
      <div>
        <WelcomeProp name="์•ˆ์œ ์ง„" />
        <WelcomeProp name="์œ ๋‚˜" />
        <WelcomeProp name="๋ฏธ๋ฏธ" />
      </div>
  );
}

export default App;

์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
    ๐Ÿ“Œ ๋งˆ์น˜, ๋ ˆ๊ณ ๋ธ”๋Ÿญ์„ ์กฐ๋ฆฝํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ...
    ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์ถ”์ƒํ™”๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • React ์•ฑ์—์„œ๋Š” ๋ฒ„ํŠผ, ํผ, ๋‹ค์ด์–ผ๋กœ๊ทธ, ํ™”๋ฉด ๋“ฑ ๋ชจ๋“  ๊ฒƒ๋“ค์ด ์ปดํฌ๋„ŒํŠธ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค.
// ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ฝ”๋“œ
import React from "react";

function Heading(props) {
  return <h1>{props.text}</h1>;
}

function Paragraph(props) {
  return <p>{props.text}</p>;
}

function Section(props) {
  return (
    <>
      <Heading text={props.title} />
      <Paragraph text={props.content} />
    </>
  );
}

export default Section;
import './App.css';
import Section from "./0411_1_์ปดํฌ๋„ŒํŠธํ•ฉ์„ฑ";

function App() {

  return  (
    <>
      <Section title="์˜ค๋Š˜์˜ ๋‚ ์”จ" content="์˜ค๋Š˜์€ ํ๋ฆฌ๊ณ  ๋Œํ’์ด ์˜ˆ์ƒ ๋ฉ๋‹ˆ๋‹ค." />
      <Section title="์˜ค๋Š˜์˜ ์Šคํฌ์ธ " content="์†ํฅ๋ฏผ EPL 100๊ณจ ๋ŒํŒŒ" />
    </>
  );
}

export default App;

๊ธฐ๋ณธ๊ฐ’ ์„ค์ • : defaultProps

  • props ๊ฐ’์„ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํ™”๋ฉด์„ ๋ณด์—ฌ์ค„ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
const MyComponent = props => {
    return <div>์•ˆ๋…•ํ•˜์„ธ์š”. ์ œ ์ด๋ฆ„์€ {props.name} ์ž…๋‹ˆ๋‹ค.</div>;
}

MyComponent.defaultProps = {
    name: "๊ธฐ๋ณธ ์ด๋ฆ„"
};

export default MyComponent;

ํƒœ๊ทธ ์‚ฌ์ด์˜ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” children

  • children : ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ ํƒœ๊ทธ ์‚ฌ์ด์˜ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” props
const MyComponent = (props) => {
  return (
    <div>
      ์•ˆ๋…•ํ•˜์„ธ์š”. ์ œ ์ด๋ฆ„์€ {props.name} ์ž…๋‹ˆ๋‹ค.<br />
      children ๊ฐ’์€ {props.children) ์ž…๋‹ˆ๋‹ค.
    </div>
  );
}
import './App.css';

import Mycomponent from './0411_2_MyComponent';

function App() {
  let insideTag = "์šด๋™";
  
  return (
    <MyComponent name="ํ™๊ธธ๋™">{insideTag}</Mycomponent>
  );
}

export default App;

๊ตฌ์กฐ๋ถ„ํ•ด(๋น„๊ตฌ์กฐํ™”ํ• ๋‹น)๋ฅผ ํ†ตํ•ด props ๋‚ด๋ถ€ ๊ฐ’ ์ถ”์ถœ

  • ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ ํ˜น์€ ๊ฐ’์„ ํ•ด์ฒดํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋‹ด์•„ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹
  • โญ๏ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ผ๋ฉด () ์•ˆ์— ๋‹ด๊ฒ ์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ํ•ด์ฒดํ•ด์„œ ๋‹ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์ค‘๊ด„ํ˜ธ{}์— ๋‹ด์•„์•ผ ํ•จ.
const MyComponent = ({name, children}) => {
	return (
      <div>
        ์•ˆ๋…•ํ•˜์„ธ์š”. ์ œ ์ด๋ฆ„์€ {name} ์ž…๋‹ˆ๋‹ค.<br />
        children ๊ฐ’์€ {children} ์ž…๋‹ˆ๋‹ค.
      </div>
  );
}

์ „๊ฐœ ์—ฐ์‚ฐ์ž

import React from "react";

const Person = ({name, age, gender}) => {
  return (
    <>
      <p>Name : {name}</p>
      <p>Age : {age}</p>
      <p>Gender : {gender}</p>
    </>
  );
}

export default Person;
import './App.css';
import Person from './0411_3_Person_์ „๊ฐœ์—ฐ์‚ฐ์ž';

// ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ : const App = () => {}
function App() {
  const personData = {
    name : "ํ™๊ธธ๋™",
    age : 20,
    gender : "๋‚จ์„ฑ"
  }

  return (
    <>
      <Person {...personData}/>
    </>
  );
}

export default App;

์ปดํฌ๋„ŒํŠธ ์ถ”์ถœ

๐Ÿ”ฎ ์ถ”ํ›„ ์ถ”๊ฐ€ ์˜ˆ์ •

profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!