Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 9. [React] React ๋ฐ์ดํฐ ํ๋ฆ ๋ณธ๋ฌธ
๐ฃ React ๋ฐ์ดํฐ ํ๋ฆ
โ๏ธ ์ปดํฌ๋ํธ๋ ์ปดํฌ๋ํธ ๋ฐ๊นฅ์์ props๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ง์น ์ ๋ฌ์ธ์(arguments) ํน์ ์์ฑ(arributes)์ฒ๋ผ ์ ๋ฌ๋ฐ์ ์ ์๋ค.
โฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฃผ์ฒด๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ -> ๋ฐ์ดํฐ ํ๋ฆ์ด ํํฅ์์ด๋ค.
โฐ React๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ด๊ณ , ์ปดํฌ๋ํธ๋ props๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์๋์ง ์์ง ๋ชปํ๋ค.
โฐ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์์ ์ํ๊ฐ ํ์ ์ปดํฌ๋ํธ์ ์ํด ๋ณํ๋ ๊ฒ์ด ์ญ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ฒ๋ผ ๋ณด์ผ ์ ์๋ค.
โฐ ์ด๋ฅผ ์ํด์ Stste ๋์ด์ฌ๋ฆฌ๊ธฐ(Lifting state up) ์ ์ด์ฉํ๋ค.
๐ฃ State ๋์ด์ฌ๋ฆฌ๊ธฐ(Lifting state up)
โฐ ์์ ์ปดํฌ๋ํธ์ '์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์' ๊ทธ ์์ฒด๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ณ , ์ด ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ๊ฐ ์คํํ๋ค.
-> ์ฌ์ ํ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ์์น์ ๋ถํฉํ๋ค.
function ParentComponent() {
const [value, setValue] = useState("๋ ๋ฐ๊ฟ์ค!");
const handleChangeValue = () => {
setValue("๋ณด์ฌ์ค๊ฒ ์์ ํ ๋ฌ๋ผ์ง ๊ฐ");
};
return (
<div>
<div>๊ฐ์ {value} ์
๋๋ค</div>
<ChildComponent handleButtonClick={handleChangeValue} /> // props๋ก ํจ์๋ฅผ ๋๊ฒจ์ค๋ค.
</div>
);
}
function ChildComponent({ handleButtonClick }) { // props๋ก ํจ์๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
const handleClick = () => {
// Q. ์ด ๋ฒํผ์ ๋๋ฌ์ ๋ถ๋ชจ์ ์ํ๋ฅผ ๋ฐ๊ฟ ์ ์์๊น?
// A. ์ธ์๋ก ๋ฐ์ ์ํ ๋ณ๊ฒฝ ํจ์๋ฅผ ์คํํ์!
handleButtonClick() // props๋ก ์ ๋ฌ๋ฐ์ ํจ์๋ฅผ ์ปดํฌ๋ํธ ๋ด์์ ์คํํ๋ค.
}
return (
<button onClick={handleClick}>๊ฐ ๋ณ๊ฒฝ</button>
)
}
//ํ์์ ๋ฐ๋ผ ์ค์ ํ ๊ฐ์ ์ฝ๋ฐฑ ํจ์์ ์ธ์๋ก ๋๊ธธ ์๋ ์๋ค.
function ParentComponent() {
const [value, setValue] = useState("๋ ๋ฐ๊ฟ์ค!");
const handleChangeValue = (newValue) => {
setValue(newValue);
};
// ...์๋ต...
}
function ChildComponent({ handleButtonClick }) {
const handleClick = () => {
handleButtonClick('๋๊ฒจ์ค๊ฒ ์์์ด ์ํ๋ ๊ฐ')
}
return (
<button onClick={handleClick}>๊ฐ ๋ณ๊ฒฝ</button>
)
}
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 10. [Web Server] CORS (0) | 2023.02.06 |
---|---|
S2) Unit 9. [React] Effect Hook (0) | 2023.02.02 |
S2) Unit 8. [HTTP/๋คํธ์ํฌ] Postman (0) | 2023.02.01 |
S2) Unit 8. [HTTP/๋คํธ์ํฌ] REST API (0) | 2023.01.31 |
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด๋ ๊ณณ) (0) | 2023.01.30 |