React Study

React - Props

eddie0329 2020. 11. 9. 23:55
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ ๋ชฉ์ฐจ

  • Introduction
  • What is Props
  • Implementation Props
  • Children Props
  • PropTypes
  • DefaultProps
  • Conclsution

๐Ÿ“Œ Introduction

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜์€ ์ด์ œ react props์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ What is Props

props๋Š” properties์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค. ์ด props๋Š” ์ƒ์œ„์˜ ๋ถ€๋ชจ์š”์†Œ๊ฐ€ ํ•˜์œ„์ธ ์ž์‹์š”์†Œ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ• ๋•Œ ์“ฐ์ž…๋‹ˆ๋‹ค.

๐Ÿ“Œ Implementation Props

๊ฐ„๋‹จํ•˜๊ฒŒ App.js ์—์„œ Hello.js์— props๋กœ ์ „๋‹ฌ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// App.js

import React from "react";
import Hello from "./Hello";
import Wrapper from "./Wrapper";

function App() {
  return (
    <div>
      <Hello name="react" color="red" /> โญ๏ธ์ด๋ ‡๊ฒŒ ์ž์‹์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      <Hello color="blue" />
    </div>
  );
}

export default App;
// Hello.js

import React from "react";

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

// ๋งŒ์•ฝ ํ•ด๋‹น props๊ฐ€ ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์ธ props ์„ธํŒ…์„ ์—ฌ๊ธฐ์„œ ํ•ด์ค„์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Hello.defaultProps = {
  name: "์ด๋ฆ„ ์—†์Œ",
};

export default Hello;

๐Ÿ“Œ Children Props

๋˜ํ•œ ์ž์‹ props๋ผ๊ณ  ํ•˜๋Š”๊ฒƒ์ด ์žˆ๋Š”๋ฐ ์ด๊ฑด vue์—์„œ์˜ slot๊ฐ€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ์—” Wrapper.js๋ฅผ ํ•œ๋ฒˆ ์„ ์–ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// App.js

import React from "react";
import Hello from "./Hello";
import Wrapper from "./Wrapper";

function App() {
  return (
    <Wrapper>
      <Hello name="react" color="red" /> // ์ด๊ฑธ children์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      <Hello color="blue" /> // ์ด๊ฒƒ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
    </Wrapper>
  );
}

export default App;
import React from "react";

function Wrapper({ children }) {
  const style = {
    border: "2px solid black",
    padding: 16,
  };

  return <div style={style}>{children}</div>; // โญ๏ธ children์„ ๋žœ๋”๋ง ํ•ด์ฃผ๋Š” ๋ชจ์Šต์„ ๋ณผ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.
}

export default Wrapper;

 

๐Ÿ“Œ PropTypes

 

๋จผ์ € prop-types๋ฅผ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

yarn add prop-types

์ด๋ ‡๊ฒŒ ์„ค์น˜ํ•ด์ฃผ์—ˆ๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

import React, { useState } from 'react';
import PropTypes from 'prop-types';

function CountDisplay({ count }) {

  return (
    <h1>{count}</h1>
  );
}

CountDisplay.propTypes = {
  count: PropTypes.number
}

PropTypes์•ˆ์—๋Š” number, string, boolean, object, array... ์™€ ๊ฐ™์€ ํƒ€์ž…์ด ์žˆ๊ณ  required๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด

 

 

import React, { useState } from 'react';
import PropTypes from 'prop-types';

function CountDisplay({ count }) {

  return (
    <h1>{count}</h1>
  );
}

CountDisplay.propTypes = {
  count: PropTypes.element.isRequired
}

 

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ DefaultProps

 

์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ ์ž ํ• ๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

import React, { useState } from 'react';

function CountDisplay({ count }) {

  return (
    <h1>{count}</h1>
  );
}

CountDisplay.defaultProps = {
  count: 0,
}

 

๐Ÿ“Œ Conclusion

์˜ค๋Š˜์€ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ react์˜ props์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. class์ผ๋•Œ์˜ react๋งŒ์„ ๋ด์„œ ๊ทธ๋Ÿฐ์ง€ ์‹ ๊ธฐํ•œ ๋ฌธ๋ฒ•๋“ค์ด ๋งŽ์ด ์ƒ๊ธฐ๊ณ  ๋” ๊ฐ„๊ฒฐํ•ด์ง„๊ฒŒ ์ข‹์€๊ฑฐ ๊ฐ™๋„ค์š”. ๊ทธ๋Ÿผ ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๋งŒ๋‚˜์š”~~

 

 

 

๋ฐ˜์‘ํ˜•