

์ปดํฌ๋ํธ์ ์์ฑ(property)์ ํด๋นํ๋ฉฐ ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ด๋ค.
๋ถ๋ชจ(์์) ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ด๋ฉฐ, React ์ปดํฌ๋ํธ๋ JavaScript ํจ์์ ํด๋์ค๋ก, props๋ฅผ ํจ์์ ์ ๋ฌ์ธ์(arguments)์ฒ๋ผ ์ ๋ฌ๋ฐ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ์ด๋ป๊ฒ ํ์๋๋์ง๋ฅผ ๊ธฐ์ ํ๋ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์, ์ปดํฌ๋ํธ๊ฐ ์ต์ด ๋ ๋๋ง ๋ ๋ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ด๊น๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ชจ๋ ํ์ ์ ๊ฐ์ ์ ๋ฌํ ์ ์๋๋ก ๊ฐ์ฒด์ ํํ๋ฅผ ๊ฐ์ง๋ค.
์ฝ๊ธฐ ์ ์ฉ(read-only)์ด๋ค.(ํจ๋ถ๋ก ๋ณ๊ฒฝ X)
props ์์ ์ ์์ ์ปดํฌ๋ํธ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ธฐ ๋๋ฌธ์, ์๋์น ์์ side effect๋ฅผ ๋ฐฉ์งํ๊ณ ์ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด์ ํํ๋ฅผ ๊ฐ์ง๋ค.
1. ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๊ณ ์ ํ๋ ๊ฐ๊ณผ ์์ฑ์ ์ ์ํ๋ค.
<parent>, <child>๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ ์ธ ํ, <parent> ์ปดํฌ๋ํธ ์์ <child> ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ค.function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child />
</div>
);
};
function Child() {
return (
<div className="child"></div>
);
};
HTML์์ ์์ฑ๊ณผ ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
<a href="www.codestates.com">Click me to visit Code States</a>
React์์ ์์ฑ๊ณผ ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ๋ ์์ ์ ์ฌํ๋, ์ ๋ฌํ๊ณ ์ ํ๋ ๊ฐ์ ์ค๊ดํธ๋ก ๊ฐ์ธ์ค๋ค.
<Child attribute={value} />
๋ฐ๋ก ์์ ๋ฐฉ๋ฒ์ ์ด์ฉํด text ์์ฑ๊ณผ "I'm the eldest child" ๋ผ๋ ๋ฌธ์์ด ๊ฐ์ ํ ๋นํ๋ฉด ์๋์ ๊ฐ๋ค.
<Child text={"I'm the eldest child"} />
2. props๋ฅผ ์ด์ฉํด ์ ์๋ ๊ฐ๊ณผ ์์ฑ์ ์ ๋ฌํ๋ค.
<parent> ์ปดํฌ๋ํธ์์ ์ ๋ฌํ "I'm the eldest child" ๊ฐ์ <child> ์ปดํฌ๋ํธ์์ ๋ฐ๋๋ค.
ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ๋ฏ์ด React ์ปดํฌ๋ํธ์ props๋ฅผ ์ ๋ฌํ๋ฉด props๊ฐ ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์จ๋ค.
function Child(props) {
return (
<div className="child"></div>
);
};
3. ์ ๋ฌ๋ฐ์ props๋ฅผ ๋ ๋๋งํ๋ค.
props๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด์๋ JSX์์ ์ง์ ๋ถ๋ฌ์ ์ฌ์ฉํด์ผ ํ๋ค.
๋จ, props๋ ๊ฐ์ฒด์ด๋ฉฐ ์ด ๊ฐ์ฒด์ {key: value}๋ <parent> ์ปดํฌ๋ํธ์์ ์ ์ํ {attribute: value}์ ํํ๋ฅผ ๋บ๋๋ค.
๋ฐ๋ผ์, props์ value๋ฅผ dot notation์ผ๋ก ์ ๊ทผํ๋ค.
function Child(props) {
return (
<div className="child">
<p>{props.text}</p>
</div>
);
};
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child text={"I'm the eldest child"} />
{/* Child ์ปดํฌ๋ํธ์ ๋ ๋ค๋ฅธ ๋ฌธ์์ด์ props ๋ก ์ ๋ฌํด ๋ณด์ธ์ */}
<Child />
</div>
);
}
function Child(props) {
// console ์ ์ด์ด props ์ ํํ๋ฅผ ์ง์ ํ์ธํ์ธ์.
console.log("props : ", props); //props :
{text: "I'm the eldest child"}
return (
<div className="child">
<p>{props.text}</p>
</div>
);
}

prop๋ฅผ ์ ๋ฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก, ์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ์ ์ฌ์ด์ value๋ฅผ ๋ฃ์ด ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
props.children ์ ์ด์ฉํด ํด๋น value์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์คํ ๊ฒฐ๊ณผ๋ ์์ ์์์ ๋์ผํ๋ค.
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child>I'm the eldest child</Child>
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.children}</p>
</div>
);
};
Q . App ์ปดํฌ๋ํธ์ ์๋ itemOne๊ณผ itemTwo๋ฅผ Learn ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ์ฌ, "React๋ฅผ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค"๋ผ๋ ๋ฌธ์์ด์ด rendering ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ์ธ์.
const App = () => {
const itemOne = "React๋ฅผ";
const itemTwo = "๋ฐฐ์ฐ๊ณ ์์ต๋๋ค.";
return (
<div className="App">
{/* Learn ์ปดํฌ๋ํธ์ itemOne ๊ณผ itemTwo ๋ฅผ
props ๋ก ์ ๋ฌํ์ธ์ */}
<Learn text = {`${itemOne} ${itemTwo}`}/>
</div>
);
};
const Learn = (props) => {
// ์ ๋ฌ๋ฐ์ props ๋ฅผ ์๋ <div> tag ์ฌ์ด์ ์ฌ์ฉํ์ฌ
// "React๋ฅผ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค" ๋ผ๋ ๋ฌธ์ฅ์ด ๋ ๋๋ง๋๋๋ก ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ์ธ์
return <div className="Learn">
<p>{props.text}</p>
</div>;
};
state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ์ด๋ค.
์ค์ ์ ํ๋ฆฌ์ผ์ด์
์ state๋ ์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋๋ฅผ ์๋ก๋ค๋ฉด, ๊ตฌ๋งคํ ๋ฌผ๊ฑด๊ณผ ๋น์ฅ์ ๊ตฌ๋งคํ์ง ์์ ๋ฌผ๊ฑด์ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌํ์ฌ ๊ตฌ๋ถ ์ง์ ๋, check๋ ์ํ์ check๋์ง ์์ ์ํ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
์๋๋ check๋ ์ํ์ ๋ฐ๋ผ ๋ณด์ด๋ ๊ธ์จ๊ฐ ๋ฌ๋ผ์ง๋ ์ฝ๋์ด๋ค.
import React, { useState } from "react";
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
์ด๋ฅผ ์ผํ๋ชฐ์ ์ ์ฉํ๋ฉด, ์ฒดํฌ ์ฌ๋ถ์ ๋ฐ๋ผ ๊ตฌ๋งคํ ๋ฌผ๊ฑด์ ๊ฐ์๋ ๊ตฌ๋งค ๊ธ์ก์ด ๋ณ๊ฒฝ๋๊ณ , ์ด์ ๋ฐ๋ผ ์ฌ์ฉ์์ ํ๋ฉด๋ ๋ฌ๋ผ์ง๋ค.
์์ ๊ฐ์ด ์ปดํฌ๋ํธ ๋ด์์ ๋ณํ ์ ์๋ ๊ฐ, ์ฆ ์ํ๋ React state๋ก ๋ค๋ค์ผํ๋ค.
React๋ state๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก useState๋ผ๋ ํจ์๋ฅผ ์ ๊ณตํ๋ค.
๋ฐ๋ก ์์์ ๋ค๋ฃฌ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์๋ ๋ฐฉ์์ ์ดํดํด๋ณด์.
useState๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ importํค์๋๋ก React๋ก๋ถํฐ useState๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค.import React, { useState } from "react";
์ดํ, useState๋ฅผ ์ปดํฌ๋ํธ ์์์ ํธ์ถํ๋ค. useState์ ํธ์ถ์ "state"๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ฉฐ ๋ณ์๋ช
์ ์์๋ก ์์ฑํ๋ค. ์ด ๋ณ์๋ React์ ์ํด ํจ์๊ฐ ์ข
๋ฃ๋๋ ์ฌ๋ผ์ง์ง ์๋๋ค.
isChecked, serIsChecked๋ useState ์ ๋ฆฌํด๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋นํ ๋ณ์์ด๋ค.
function CheckboxExample() {
// ์๋ก์ด state ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์ฌ๊ธฐ์๋ ์ด๊ฒ์ isChecked ๋ผ ๋ถ๋ฅด๊ฒ ์ต๋๋ค.
const [isChecked, setIsChecked] = useState(false);
}
์์ ์ฝ๋๋ฅผ ํ์ด์ฐ๋ฉด ์๋์ ๊ฐ๋ค.
function CheckboxExample() {
const stateHookArray = useState(false);
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
}
useState ๋ฅผ ํธ์ถํ๋ฉด ๋ฐฐ์ด์ ๋ฐํํ๋ค.
๋ฐฐ์ด์ 0๋ฒ์งธ ์์๋ ํ์ฌ state๋ณ์์ด๊ณ , 1๋ฒ์งธ ์์๋ ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์์ด๋ค.
๋ํ, useState์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ ๊ฐ์ state์ ์ด๊น๊ฐ์ด๋ค.
const [state ์ ์ฅ ๋ณ์, state ๊ฐฑ์ ํจ์] = useState(์ํ ์ด๊ธฐ ๊ฐ);
์์ ์๋์ฝ๋๋ฅผ ์ค์ ๋ก ์ ์ฉํ๋ฉด ์๋์ ๊ฐ๋ค.
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
// const [state ์ ์ฅ ๋ณ์, state ๊ฐฑ์ ํจ์] = useState(state ์ด๊น๊ฐ);
isChecked : state๋ฅผ ์ ์ฅํ๋ ๋ณ์
setIsChecked : state isChecked ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์
useState : state hook
false : state ์ด๊น๊ฐ
state๋ฅผ ๊ฐฑ์ ํ๋ ค๋ฉด state ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, ์์์ ๊ฒฝ์ฐ setIsChecked ๋ฅผ ํธ์ถํ๋ค.
์์์ ๊ฒฝ์ฐ, input[type=checkbox] JSX ์๋ฆฌ๋จผํธ์ ๊ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ์ isChecked ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์์ checked๋ก ๊ฐ์ด ๋ณ๊ฒฝ๋์๋ค๋ฉด, React์ isChecked ๋ํ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
input[type=checkbox] ์๋ฆฌ๋จผํธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด onChange ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๋ก ํด์ผํ๋ค.
React๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ์ฉ์๊ฐ ์ฒดํฌ๋ฐ์ค ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด onChange ์ด๋ฒคํธ๊ฐ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์์ธ handleChecked ๋ฅผ ํธ์ถํ๊ณ , ์ด ํจ์๊ฐ setIsChecked ๋ฅผ ํธ์ถํ๊ฒ ๋๋ค. setIsChecked ๊ฐ ํธ์ถ๋๋ฉด ํธ์ถ๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ isChecked ๋ณ์๊ฐ ๊ฐฑ์ ๋๋ฉฐ, React๋ ์๋ก์ด isChecked ๋ณ์๋ฅผ CheckboxExample ์ปดํฌ๋ํธ์ ๋๊ฒจ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํ๋ค.
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
React ์ปดํฌ๋ํธ๋ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋กญ๊ฒ ํธ์ถ๋๊ณ ๋ฆฌ๋ ๋๋ง ๋๋ฉฐ, React state๋ ์ํ ๋ณ๊ฒฝ ํจ์ ํธ์ถ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.(๊ฐ๋ฐ์์ ์ฝ์!, ์์์ ๊ฒฝ์ฐ setIsChecked)
๊ฐ์ ๋ก ๋ณ๊ฒฝ์ ์๋ํ ๊ฒฝ์ฐ, ๋ฆฌ๋ ๋๋ง์ด ๋์ง ์๊ฑฐ๋ state๊ฐ ์ ๋๋ก ๋ณ๊ฒฝ๋์ง ์๋๋ค.
Reference: ์ฝ๋์คํ ์ด์ธ