๐ ฟ๏ธ Props
Props์ ๊ฐ๋ ์ ๋ฐฐ์ธ ๋ ๋น์ ์ ๋ฆฌํด๋ ๋ด์ฉ์ "์ปดํฌ๋ํธ ํ์ฅ ๋ฐฉ์์ด๋ฉฐ, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ๋ฒ" ์ผ๋ก ํ ์ค ์ ๋ฆฌํด๋์๋ค. ์ด๋ฅผ Java์ ์ฎ์ด์ ์๊ฐํ์ ๋, ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ๊ฐ๋ ์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ด๋ค. ์ฌ์ค, Java ๋ฟ๋ง ์๋๋ผ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ์์๋ ํ๋ผ๋ฏธํฐ๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ์ด๋ฅผ ๋ฆฌ์กํธ์์๋ ์ ๋ฐ๋ก Props๋ก ์ ๋ฆฌํ์ง๋ ๋ชจ๋ฅธ๋ค. ๋ค๋ง, ์๋ฐ์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด ์๋ค๋ฉด "ํจ์ ์์ฒด๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ค"๋ ๋ด์ฉ์ผ ๊ฒ์ด๋ค.
์๋ฐ์ ๊ฒฝ์ฐ, ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ๋ค์ด๊ฐ ์ ์๋ ์ ๋ณด๋ค์ด int, String, array์ ๊ฐ์ ๋ฐ์ดํฐ ํํ๊ฑฐ๋, ํด๋์ค์ ํํ๋ฅผ ์ ๋ฌ๋ฐ์ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋ฐ์ดํฐ ํํ์ ๊ฒฝ์ฐ ์ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ํด๋์ค์ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๊ฑฐ๋, ์์ฑ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉํ๊ฒ ๋์ด์๋ค. ๋ฌผ๋ก , ์๋ฐ๊ฐ ๋๋ค์์ ์ง์ํ ์ดํ๋ก ๋ฉ์๋์ ๋ฆฌํด๊ฐ์ ํจ์ ํํ์ ์ ์๊ฐ ์ฌ์ฉ๋ ์ ์๊ธฐ๋ ํ๋ค. ๊ทธ๋ ์ง๋ง ์ฌ์ ํ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ํน์ "๋ฉ์๋"๊ฐ ๋๊ฒจ์ ธ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์๋ค.
๋ฆฌ์กํธ์ ๊ฒฝ์ฐ, ์ ๊ธฐํ๊ฒ๋ ํจ์ ์์ฒด๋ฅผ Prop์ผ๋ก ๋๊ธด๋ค. ํด๋น ํจ์๋ฅผ ์ ๋ฌ๋ฐ์ ํจ์๋ ์ปดํฌ๋ํธ๋ ๊ทธ ํจ์๋ฅผ ๊ทธ~~๋๋ก ์ฐ๋ฉด ๋๋ค. ๊ฐ์ฒด ์์ฑ, ๋ฉ์๋ ํธ์ถ๊ณผ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ๊ทธ๋ฅ ํจ์๋ฅผ ์คํ์ํค๋ ๊ฐ๋
์ด๋ค. ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด์ ํน์ง์ผ๋ก ์ธํด ๊ฐ๋ฅํ ๋ด์ฉ์ด๋ค. ์ด ๊ฐ๋
์ด ์๋ง๋ "์ผ๊ธ๊ฐ์ฒด" ์ผ ๊ฒ์ด๋ค. (๊ถ๊ธํ์๋ฉด ๊ฒ์ ํด๋ณด์๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฐ๋ค.) ๊ฐ์ธ์ ์ผ๋ก๋ ์์ง ์ด๋ง์ด๋งํ ์ฐจ์ด๋ผ๊ณ ๋๊ปด์ง์ง ์๊ธฐ๋ ํ์ง๋ง, ์๋ง๋ ๊ณ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด ์ฒด๊ฐ์ด ๋ ๋งํ ๋ถ๋ถ์ผ ๊ฒ ๊ฐ์์ ๋งค์ฐ ์ ๊ธฐํ๋ค.
โจ๏ธ ์ด๋ป๊ฒ ์ฐ๋๋ฐ?
Props๋ฅผ ์ฌ์ฉํ๋ ์์ ์ฝ๋๋ฅผ ํ๋ ๊ฐ์ ธ์๋ค. React ๊ด๋ จ ์์ ์ฝ๋๋ ๋ชจ๋ ์ ํ๋ฒ ๋
ธ๋ง๋์ฝ๋์ ๋ฆฌ์กํธ ๋ฌด๋ฃ๊ฐ์ ํด๋ก ์ฝ๋ฉ ์์ ์ด๋ค. ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, Btn์ด๋ผ๋ ํจ์์ onClick์ด๋ผ๋ ํจ์๊ฐ ๋์ด์ฌ ์ ์๊ฒ ์ ์ธ๋์ด ์๊ณ , ๊ทธ ํจ์๋ฅผ ๊ทธ๋๋ก ๋ช
์ํด์ฃผ๊ธฐ๋ง ํ๋ฉด ํด๋น ํจ์๊ฐ ๋์ํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋, onClick์ด๋ผ๋ ํจ์๋ ์๋ ์ฝ๋์๋ ์๋ค. ๊ทธ ์ด์ ๋ ํด๋น ์ฝ๋์๋ ์์ง๋ง, ํ ์ปดํฌ๋ํธ๋ฅผ import ํด์์, ํด๋น ์ปดํฌ๋ํธ์ ์๋ ํจ์๋ฅผ ๋ถ๋ฌ์๊ธฐ ๋๋ฌธ์ด๋ค.
function Btn({ text, onClick }) {
return (
<button
onClick={onClick}
style={{
backgroundColor: "tomato",
color: "white",
padding: "10px 20px",
border: 0,
borderRadius: 10
}}
>
{text}
</button>
)
}
const MemorizedBtn = React.memo(Btn);
function App() {
const [value, setValue] = React.useState("Save Changes");
const changeValue = () => setValue("Revert Changes");
return (
<div>
<MemorizedBtn text={value} onClick={changeValue} />
<MemorizedBtn text="Continue" />
</div>
)
}
const root = document.getElementById("root")
ReactDOM.render(<App />, root)
๋ํ, propTypes๋ฅผ ํตํด ์ ์๋ ํจ์์ ๋ค์ด์ฌ props์ ๋ฐ์ดํฐ ํํ ๋ฑ์ ๋ฏธ๋ฆฌ ์ ์ํด๋ ์ ์๊ธฐ๋ ํ๋ค.
function Movie({ id, coverImg, title, summary, genres }) {
return (
<div>
<img src={coverImg} alt={title} />
<h2>
<Link to={`/movie/${id}`}>{title}</Link>
</h2>
<p>{summary > 235 ? `${summary.slice(0, 235)}...` : summary}</p>
<ul>
{genres.map((g) => (
<li key={g}>{g}</li>
))}
</ul>
</div>
);
}
Movie.propTypes = { // props๋ฅผ ์ ์ํด๋๋ ๋ถ๋ถ
id: PropTypes.number.isRequired,
coverImg: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
summary: PropTypes.string.isRequired,
genres: PropTypes.arrayOf(PropTypes.string).isRequired,
};
๋ฆฌ์กํธ๋ ์ด๋ฐ ๊ธฐ๋ฅ๋ ์๊ตฌ๋ ํ๋ ๊ฒฝํ์ ํ๋ ์๊ฐ์ด์๋ค.
'JavaScript > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] State (0) | 2024.07.16 |
---|---|
[React] JSX (0) | 2024.07.14 |