๊ฐ์ - Section 5 : React.js ์ ๋ฌธ
์ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/
์ธํ๋ฐ :
[2024] ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ(React.js) : ๊ธฐ์ด๋ถํฐ ์ค์ ๊น์ง ๊ฐ์ | ์ด์ ํ Winterlood - ์ธํ๋ฐ
์ด์ ํ Winterlood | ๊ฐ๋ ๋ถํฐ ๋ ํนํ ํ๋ก์ ํธ๊น์ง ํจ๊ป ๋ค๋ค๋ณด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฆฌ์กํธ๋ฅผ ์ด ๊ฐ์๋ก ํ ๋ฒ์ ๋๋ด์. ํ์ต์ ์งง๊ฒ, ์์ฉ์ ๊ธธ๊ฒ 17์๊ฐ ๋ถ๋์ All-in-one ๊ฐ์!, ๋ฆฌ์กํธ, ํ ๊ฐ์๋ก
www.inflearn.com
Props - ์ปดํฌ๋ํธ์ ๊ฐ ์ ๋ฌํ๊ธฐ
* Props๋? React ์ปดํฌ๋ํธ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๋ ๋ฐ์ดํฐ์ด๋ค. ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉฐ ์์ ์ปดํฌ๋ํธ์์ ์์ ํ ์ ์๋ค.
* Props ์ฌ์ฉ ์์
1. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ Props ์ ๋ฌ(JSX๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ์ ์์ฑ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ)
function App() {
return (
<>
<Button text = {"๋ฉ์ผ"}/>
<Button text = {"์นดํ"}/>
<Button text = {"๋ธ๋ก๊ทธ"}/>
</>
)
}
2. ์์ ์ปดํฌ๋ํธ์์ Props ๋ฐ๊ธฐ(์ ๋ฌ๋ Props๋ ์์ ์ปดํฌ๋ํธ์์ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ ๊ทผ)
const Button = (props) => {
return (
<button>{props.text}</button>
)
};
* Props์ ํ์ฉ ์์
1. ๊ธฐ๋ณธ๊ฐ ์ค์ (defaultProps - Props๊ฐ ์ ๋ฌ๋์ง ์์์ ๋ ๊ธฐ๋ณธ๊ฐ ์ค์ )
// ๋ถ๋ชจ ์ปดํฌ๋ํธ
function App() {
return (
<>
<Button text = {"๋ฉ์ผ"} color = {"red"} />
<Button text = {"์นดํ"}/>
<Button text = {"๋ธ๋ก๊ทธ"}/>
</>
)
}
// ์์ ์ปดํฌ๋ํธ
const Button = (props) => {
return (
<button style = { {color : props.color }}>
{props.text}
</button>
)
};
Button.defaultProps = {
color : "black"
}
export default Button;
2. ๋ค์ํ ๋ฐ์ดํฐ ์ ๋ฌ(์ซ์, ๋ฌธ์์ด, ๋ฐฐ์ด, ๊ฐ์ฒด ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ๋ฌ)
function Profile({ name, age, hobbies }) {
return (
<div>
<h1>{name}</h1>
<p>Age: {age}</p>
<ul>
{hobbies.map((hobby, index) => (
<li key={index}>{hobby}</li>
))}
</ul>
</div>
);
}
function App() {
return <Profile name="Alice" age={25} hobbies={['Reading', 'Traveling']} />;
}
3. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ children ์ ๋ฌ(<์ปดํฌ๋ํธ>๋ด์ฉ</์ปดํฌ๋ํธ> ํํ๋ก ์์ฑํ๋ฉด ๊ทธ ๋ด์ฉ์ด props.children์ผ๋ก ์ ๋ฌ๋จ)
function Wrapper(props) {
return <div className="wrapper">{props.children}</div>;
}
function App() {
return (
<Wrapper>
<h1>Hello, World!</h1>
<p>This is a child element.</p>
</Wrapper>
);
}
์ด๋ฒคํธ ํธ๋ค๋ง
* ์ด๋ฒคํธ ํธ๋ค๋ง ์ด๋? ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๊ฑฐ๋, ์ ๋ ฅ์ ํ๊ฑฐ๋, ๋ง์ฐ์ค ์์ง์ ๋ฑ๊ณผ ๊ฐ์ ๋์์ ์ํํ์ ๋ ์คํ๋๋ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฆฌ์กํธ๋ HTML์ ๊ธฐ๋ณธ DOM ์ด๋ฒคํธ์ ์ ์ฌํ์ง๋ง ๋ช๊ฐ์ง ์ฐจ์ด๊ฐ ์๋ค.
(์ฌ๊ธฐ์ ์ด๋ฒคํธ๋, ์น ๋ด๋ถ์์ ๋ฐ์ํ๋ ์ฌ์ฉ์์ ๋ชจ๋ ํ๋์ด๋ผ๊ณ ํ ์ ์๋ค)
* ๋ฆฌ์กํธ ์ด๋ฒคํธ ํธ๋ค๋ง ํน์ง
1. ์นด๋ฉ ์ผ์ด์ค ์ฌ์ฉ
: ๋ฆฌ์กํธ์ ์ด๋ฒคํธ ์์ฑ์ ์ด๋ฆ์ ์๋ฌธ์ ๋์ onClick, onChange์ฒ๋ผ ์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํจ
2. SyntheticEvent(ํฉ์ฑ ์ด๋ฒคํธ) ์ฌ์ฉ
: ๋ฆฌ์กํธ๋ ๋ชจ๋ ์ด๋ฒคํธ๋ฅผ SyntheticEvent๋ผ๋ ๋ํผ ๊ฐ์ฒด๋ก ์ฒ๋ฆฌํ๋ฉฐ, ์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ์ ํธํ์ฑ์ ์ ๊ณตํ๋ค
(ํฉ์ฑ ์ด๋ฒคํธ๋ ๋ชจ๋ ์น ๋ธ๋ผ์ฐ์ ์ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ ํ๋๋ก ํต์ผํ ํํ์ด๋ค)
State๋ก ์ํ ๊ด๋ฆฌํ๊ธฐ
* state๋? ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ํ๋ด๊ณ ๋ณ๊ฒฝ๋ ์ ์๋ค.
* state ํน์ง
1. ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ
: state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ ์ธ๋๊ณ ๊ด๋ฆฌ ๋จ. ์ธ๋ถ์์ ์ง์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ๋ด๋ถ์์๋ง ์์ ๊ฐ๋ฅ.
2. ๋ณ๊ฒฝ ์ ์๋ UI ์ ๋ฐ์ดํธ
: state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํํ์ฌ ํ๋ฉด์ ์ ๋ฐ์ดํธ ํจ
3. ๋ถ๋ณ์ฑ ์ ์ง
: state๋ฅผ ์ง์ ์์ ํ์ง ์๊ณ , setState(ํด๋์ค ์ปดํฌ๋ํธ)๋ ์ํ ์ ๋ฐ์ดํธ ํจ์(ํจ์ ์ปดํฌ๋ํธ)๋ฅผ ์ฌ์ฉํด ๋ณ๊ฒฝํด์ผ ํ๋ค.
* state ์ฌ์ฉ๋ฒ
import { useState } from 'react';
function App() {
const [count, setCount] = useState(0);
return (
<>
<h1>{count}</h1>
<button onClick={() => {
setCount(count + 1);
}}>+</button>
</>
)
}
export default App
- useState(์ด๊ธฐ๊ฐ) : useState๋ ์ํ๊ฐ์ ์ด๊ธฐํ ํ๋ ํจ์์ด๋ฉฐ, ๋ฐํ๊ฐ์ [์ํ๊ฐ, ์ํ ์ ๋ฐ์ดํธ ํจ์]์ ๋ฐฐ์ด์ด๋ค.
- ์ํ๊ฐ : ํ์ฌ ์ํ๋ฅผ ๋ํ๋ธ๋ค. ์ฌ๊ธฐ์๋ count
- ์ํ ์ ๋ฐ์ดํธ ํจ์ : ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์. ์ฌ๊ธฐ์๋ setCount
State์ Props
* State์ Props๋ก ๋ณด๋ ๋ฆฌ๋ ๋๋ง
const Bulb = ({light}) => {
return (
<div>
{light === "ON" ?
<h1 style={{backgroundColor : "orange"}}>ON</h1> : <h1 style={{backgroundColor : "gray"}}>OFF</h1>}
</div>
)
}
function App() {
const [count, setCount] = useState(0);
const [light, setLight] = useState("OFF");
return (
<>
<div>
<Bulb light={light} />
<button onClick={() => {
setLight(light === "ON" ? "OFF" : "ON")
}}>{light === "ON" ? "๋๊ธฐ" : "์ผ๊ธฐ"}</button>
</div>
<div>
<h1>{count}</h1>
<button onClick={() => {
setCount(count + 1);
}}>+</button>
</div>
</>
)
}
* App ์ปดํฌ๋ํธ : ๋ ๊ฐ์ state(count์ light)๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด ์ค light๋ Bulb ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌ๋๋ค.
* Bulb ์ปดํฌ๋ํธ : light๋ผ๋ props๋ฅผ ๋ฐ์ ํ๋ฉด์ ON ๋๋ OFF ์ํ๋ฅผ ํ์ํ๋ค.
* ๊ทธ๋ ๋ค๋ฉด count ๋ณ๊ฒฝ ์ Blub๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋๊ฐ?
: count๋ง ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, Bulb ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ๋ก ๋ฐ์ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋ ๋๋ง๋์ง ์๋๋ค. ์ฆ, props๋ ๋์ผํ ๊ฐ(light)์ ์ ์งํ๋ฏ๋ก Bulb๋ ๋ค์ ๋ ๋๋ง ๋์ง ์๋๋ค.
* ๊ฒฐ๋ก ! ๋ฆฌ๋ ๋๋ง ์กฐ๊ฑด
- state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง ๋๋ค
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ state๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ์์ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋ props๊ฐ ๋ณํ์ง ์์ผ๋ฉด ์์์ ๋ฆฌ๋ ๋๋ง ๋์ง ์๋๋ค
- props๊ฐ ๋ณ๊ฒฝ๋๋ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๋ค
'IT > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - ํ๋ก์ ํธ 1 (์นด์ดํฐ ์ฑ) (0) | 2024.11.25 |
---|---|
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 3 (0) | 2024.11.25 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ์ ๋ฌธ 1 (1) | 2024.11.19 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - React.js ๊ฐ๋ก (1) | 2024.11.15 |
[ํ์ ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ] - Node.js ๊ธฐ์ด (5) | 2024.11.01 |