[React] props

ํ˜œ๋ฆฐยท2022๋…„ 9์›” 4์ผ
1

React

๋ชฉ๋ก ๋ณด๊ธฐ
8/18
post-thumbnail

props๋ž€?


๐Ÿ“œ props
props๋Š” properties(์†์„ฑ)๋ฅผ ์ค„์ธ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ฃ . props์˜ ๊ฐ’์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ 



๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•


๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•(destructing assignment)์„ ํ†ตํ•ด props ๋‚ด๋ถ€ ๊ฐ’์„ ์ถ”์ถœํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. props๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌํ•ด์š”. ์ด๋Š” ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•์œผ๋กœ ํ•ด์ฒดํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

๐Ÿ“œ ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น (๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น)
๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์€ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ํ•ด์ฒดํ•˜์—ฌ ๊ทธ ๊ฐ’์„ ๊ฐœ๋ณ„ ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” JavaScript ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค.
MDN

๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด props.content์™€ ๊ฐ™์ด ๊ฐ์ฒด ์ ‘๊ทผ๋ฒ•์ธ ์  ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•ด์š”. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด content๋งŒ ์ž‘์„ฑํ•ด ํ›จ์”ฌ ํŽธ๋ฆฌํ•ด์š”.

// props ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
const Comment = ({ props }) => {
  return <p>{props.content}</p>;
};

// ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น ๋ฌธ๋ฒ• ์‚ฌ์šฉ
const Comment = ({ content }) => {
  return (
      <p>{content}</p>
  );
};

ํ˜„์žฌ ์ œ๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” props์— ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ESLint ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๋„๋ก ์„ค์ •๋˜์–ด์žˆ์–ด์š”.

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด propsํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.



props type ๊ฒ€์‚ฌ


๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ์†์„ฑ์˜ type์„ ๊ฒ€์‚ฌํ•  ์ˆ˜๋„ ์žˆ์–ด์š”. ์ด๋Š” propTypes๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค! ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•ด๋‹น ์†์„ฑ์€ ์–ด๋–ค type์„ ๊ฐ€์งˆ ๊ฒƒ์ธ์ง€ ์ง€์ •ํ•ด์š”. ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ type๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด console์— error๋ฉ”์„ธ์ง€๋ฅผ ๋„์›๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ type ๊ฒ€์‚ฌ๋Š” ๋ฆฌ์•กํŠธ๊ฐ€ ๋ Œ๋”๋งํ•˜๋Š” ๊ณผ์ •์—์„œ ์ž˜๋ชป๋œ ์†์„ฑ๊ฐ’ ํƒ€์ž…์„ ๊ฒ€์‚ฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•ด์š”. ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ง์ ‘ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ํ•œ ๋ฒˆ ์ ์šฉ์‹œ์ผœ๋ดค์–ด์š”.

// ์ž์‹ ์ปดํฌ๋„ŒํŠธ
import React from "react";
import PropTypes from "prop-types";

const Comment = ({ content }) => {
  return (
      <p>{content}</p>
  );
};

Comment.propTypes = {
  content: PropTypes.number,
};

export default Comment;
  1. PropTypes ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • PropTypes๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ด๋ฅผ importํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์–ด์š”.

  2. ์ž์‹์ปดํฌ๋„ŒํŠธ.propTypes={ }
    • ํ•ด๋‹น ๊ฐ์ฒด ์•ˆ์— ์›ํ•˜๋Š” ์†์„ฑ์˜ type์„ ์ง€์ •ํ•ด์š”.
    • content๋ผ๋Š” ์†์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ๋Œ“๊ธ€์„ ๋ฐ›์•„์™€์š”. error๋ฌธ๊ตฌ๊ฐ€ ์ž˜ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด type์„ number๋กœ ์ง€์ •ํ•ด๋‘๊ณ , ์ฑ„ํŒ…์ฐฝ์— ๋ฌธ์ž๋ฅผ ์ณ๋ดค์–ด์š”. ์•„๋ž˜์™€ ๊ฐ™์ด type์„ number๋ผ๊ณ  ์˜ˆ์ƒํ–ˆ๋Š”๋ฐ string์ด ๋‚˜์™”๋‹ค๋Š” ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค!



์ฐธ๊ณ 


๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ 
PropTypes ์“ฐ๋Š” ์ด์œ , ๋ฐฉ๋ฒ•

profile
FE Developer

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