1. ๊ฐ์
์ฌ๊ธฐ์๋ Props์ ํน์ง๊ณผ ์ฌ์ฉ๋ฒ์ ๋ํ์ฌ ์์๋ณด๊ฒ ๋ค.
2. Props์ ํน์ง
Props์ ๊ฐ์ฅ ์ค์ํ ํน์ง์ READ_ONLY ๋ผ๋ ํน์ง์ด๋ค. ์ฝ๊ธฐ ๋ฐ์ ๋ชปํ๋ค๋ผ๋ ๋ง์ ๋ค์ ๋งํด "๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค."๋ผ๋ ์๋ฏธ์ด๊ธฐ๋ ํ๋ค. ์ ๋ฒ ํฌ์คํ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ถ์ด๋นต ํ, ๊ฑฐ๊ธฐ์ ๋์จ Elements๋ฅผ ๋ถ์ด๋นต, Props๋ฅผ ๋ถ์ด๋นต ์ ์ฌ๋ฃ๋ก ํํํ๋๋ฐ, ์ด๋ฏธ ๋ง๋ค์ด์ง ๋ถ์ด๋นต ์ ์ฌ๋ฃ๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ์ด์น์ด๋ค. ๋ง์ฝ ์ฌ์ฉ์ ์ ๋ ฅ์ผ๋ก ์๋ก์ด ํ๋ฉด์ ๊ทธ๋ ค์ผ ํ๋ค๋ฉด, ์๋ก์ด Props๋ฅผ ๋ง๋ค์ด ์ปดํฌ๋ํธ์ ๋ฃ๊ณ ์๋ก์ด Elements๋ฅผ Re-Rendering ํ์ฌ ํ๋ฉด์ ๋์์ผ ํ๋ค. ๊ทธ๋ฌ๋๊น, ์๋ก์ด ๋ถ์ด๋นต์ด ๋จน๊ณ ์ถ์ผ๋ฉด ์์ ์ฅ ๋ถ์ด๋นต์ ๋ฒ๋ฆฌ๊ณ ์๋ก ๊ตฌ์๋ฌ๋ผ ํด์ผํ๋ค๋ ๊ฒ์ด๋ค.
์ด ํน์ง์ ์ปดํฌ๋ํธ์ ์ฎ์ด์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ค๋ช ํด์ผํ ๊ฑฐ ๊ฐ๋ค. ๊ทธ ์ ์ ๋จผ์ JavaScript์ ํจ์ ์ข ๋ฅ์ ๋ํด์ ์์ธํ ์์๋ณด๊ณ ๊ฐ์.
์?
์ผ๋จ ์์๋ณด์.
โ JavaScript ํจ์์ ์ข ๋ฅ: pure ํจ์์ Impure ํจ์
โ Pure ํจ์
function sum(a,b) {
return a+b;
}
ํด๋น ํจ์๋ ์ ๋ ฅ๊ฐ์ ๋ฐ๊พธ์ง ์์ผ๋ฉด ๊ฐ์ ์ ๋ ฅ์ ๋ํด์๋ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ์ด์ฒ๋ผ ์ ๋ ฅ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๊ณ , ๊ฐ์ ์ ๋ ฅ์ ๋ํด์ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ํจ์๋ฅผ PURE ํจ์๋ผ๊ณ ํ๋ค.
โ Impure ํจ์
function withdraw(account, amount) {
account.total -= amount
}
ํด๋น ํจ์๋ ๊ณ์ข์์ ์ถ๊ธํ๋ ๋ชจ์ต์ ๊ตฌํํ ๊ฒ์ด๋ค. ๊ณ์ข ์ด ์ฉ๋์์ amount ๊ฐ ๋งํผ ๊ฐ์ ๋บ๋ค. ํด๋น ํจ์๋ ์ ๋ ฅ ๊ฐ์ ๋ํ ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๊ณ , ๊ฐ์ ์ ๋ ฅ์ ๋ํด์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์๋ํ๋ฉด, amount๊ฐ 0์ด ์๋ ์ด์, account.total ๊ฐ์ ํด๋น ํจ์๋ฅผ ์งํํ ๋๋ง๋ค ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ฒ๋ผ ์ ๋ ฅ๊ฐ์ ์ํฅ์ ์ฃผ๊ณ , ๊ฐ์ ์ ๋ ฅ์ ๋ํด์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์๋ ํจ์๋ฅผ IMPURE ํจ์๋ผ๊ณ ํ๋ค.
์ค, ๊ทผ๋ฐ ์ด๊ฑฐ ์ ์์๋ดค๋๋ฐ?
์ด๋ Component์์ Props๋ฅผ ์ด๋ป๊ฒ ๋ค๋ค์ผ ํ๋์ง์ ๋ํด ๋ ์์ธํ ์ค๋ช ํ๊ธฐ ์ํ ์ฌ์ ์ง์์ด๋ค.
โ ์ปดํฌ๋ํธ์ Props์ ๊ด๊ณ
React ๊ณต์ ๋ฌธ์์์๋ ๋ค์๊ณผ ๊ฐ์ด Props์ ์ปดํฌ๋ํธ์ ๊ด๊ณ๋ฅผ ์ค๋ช ํ๋ค.
๋ชจ๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๊ดํ์ฌ, ์ปดํฌ๋ํธ์ ๊ทธ๋ค์ Props์ ๊ด๊ณ๋ Pure ํจ์์ ์ ๋ ฅ๊ฐ์ ๊ด๊ณ์ฌ์ผ ํ๋ค.
์ด๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ด ์ค๋ช ํ ์ ์๋ค.
๋ชจ๋ ์ปดํฌ๋ํธ์ Props ๊ฐ์ ๋ณ๊ฒฝ๋๋ฉด ์๋๋ฉฐ, ๊ฐ์ Props ์ ๋ ฅ์ ๊ดํ์ฌ ํญ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค!
๋ผ๋ ๊ฒ์ด๋ค. ํฅ ์ฌ์๋ฐ ํฅ๋๊ณ ์ฝฉ ์ฌ์๋ฐ๋ ๋ฌด์กฐ๊ฑด ์ฝฉ์ด ๋์ผ ํ๋ ๊ฒ์ด๋ค.
2. Props์ ์ฌ์ฉ๋ฒ
Props๋ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ ฅ๊ฐ์ ๋ ์์ธ๋ฐ, ๊ฐ์ด ์ค์ ์ปดํฌ๋ํธ๋ก ๋ค์ด์ค๋ ํํ๊ฐ ์ผ๋ฐ์ ์ธ ์ ๋ ฅ์ ๋นํด์ ๋ณต์กํ๋ค. ๊ณผ์ ์ ์ค๋ช ํ๋ฉด
์ผ๋จ ์ฒซ์งธ, ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ ๋ง์น ํ๊ทธ ์ฒ๋ผ ๋ณด์ธ๋ค. ๊ทธ๋์ ํ๊ทธ ์์ฑ์ ๊ฐ ๋ฃ๋ฏ์ด props๊ฐ ๋ ๊ฐ๋ค์ ๋ฃ๋๋ค. ์ ๋ ฅ๊ฐ์ด ์ผ๋ฐ์ ์ธ ๋ฌธ์์ด ํน์ ์ซ์์ด๋ฉด ""๋ฅผ ์จ๋ ๋๊ณ , {}๋ฅผ ์จ๋ ๋๋ค.
function App (props) {
return (
<Profile
name="์ํ"
count={1500}
/>
)
}
๋์งธ, Props๋ ํด๋น ๊ฐ๋ค์ ๋ฐ์์ ์์ฑ: ๊ฐ ํํ์ JSON์ผ๋ก ๋ณํํ๋ค. ์์ Profile์ Props๋ฅผ ๋ค์ฌ๋ค ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
{
name: "์ํ",
count: 1500
}
์ ์งธ, ์ด์ ์ง์ง ๋ณธ ์ปดํฌ๋ํธ ๋ ๋ฒจ๋ก ๊ฐ๋ฉด ํด๋น Props์ ๊ฐ๋ค์ ์ ํ๊ธฐ๋ฒ์ผ๋ก ๊บผ๋ด์ฐ๋ฉด ๋๋ค.
const Profile = (props) => {
console.log(props.name);
console.log(props.count);
}
โ ๋ณต์กํ ์์
์๋ค์ํผ props ๊ฐ์ผ๋ก ๋ฌธ์์ด์ด๋ ์ซ์๋ง ๋ค์ด๊ฐ์ง ์๋๋ค. ๋๋๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ๊ฐ ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํ๋์ง ์์๋ณด์. ๋ง์ฝ Props๋ก ์ปดํฌ๋ํธ ๊ฐ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ, ๋ฌด์กฐ๊ฑด ์์ฑ์ด๋ฆ = { ์ปดํฌ๋ํธ} ํํ๋ก ๋ค์ด๊ฐ์ผ ํ๋ค.
์์ ์์์์ Header์ footer๋ฅผ ๋ณด๋ฉด, ์ปดํฌ๋ํธ๋ฅผ props์ ๊ฐ์ผ๋ก ๋ฃ์์์ ์ ์ ์๋ค. ๋ค์ 2,3๋ฒ ๊ณผ์ ์ ๊ฐ๋ค. ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๊บผ๋ด์ ๋ณธ ์ปดํฌ๋ํธ์์ ์ฐ๊ณ ์ถ๋ค๋ฉด, props.header ๋ props.footer๋ผ๊ณ ๋ถ๋ฌ์ ์ฐ๋ฉด ๋๋ค.