Jieunny์ ๋ธ๋ก๊ทธ
S2) Unit 6. [React] React State & Props ๋ณธ๋ฌธ
๐ฃ State
โ๏ธ ์ปดํฌ๋ํธ ์ฌ์ฉ ์ค ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ
โ๏ธ ๋ด๋ถ์์ ๋ณํํ๋ ๊ฐ
๐ฃ State hook, useState ์ฌ์ฉ๋ฒ
โ๏ธ useState()
1๏ธโฃ ๋ถ๋ฌ์ค๊ธฐ
import { useState } from "react";
2๏ธโฃ ์ปดํฌ๋ํธ ์์์ ํธ์ถํ๊ธฐ -> state๋ผ๋ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๊ฐ๋ค(state๋ณ์๋ ํจ์๊ฐ ๋๋๋ ์ฌ๋ผ์ง์ง ์๋๋ค)
function CheckboxExample() {
// ์๋ก์ด state ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์ฌ๊ธฐ์๋ ์ด๊ฒ์ isChecked ๋ผ ๋ถ๋ฅด๊ฒ ์ต๋๋ค.
const [isChecked, setIsChecked] = useState(false);
// useState์ ๋ฆฌํด๊ฐ์ ๊ตฌ์กฐ ๋ถํด ํ ๋น ํ๊ณ ์๋ค.
// setIsCheckedํจ์๋ isChecked ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์
}
const [state ์ ์ฅ ๋ณ์, state ๊ฐฑ์ ํจ์] = useState(์ํ ์ด๊ธฐ ๊ฐ);
3๏ธโฃ ์ฌ์ฉํ๊ธฐ
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
4๏ธโฃ ๊ฐฑ์ ํ๊ธฐ
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
โฐ setIsChecked ํจ์๋ฅผ ํตํด isChecked ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
๐จ ์ฃผ์์
โฐ React ์ปดํฌ๋ํธ๋ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋กญ๊ฒ ํธ์ถ๋๊ณ , ๋ฆฌ๋ ๋๋ง ๋๋ค.
โฐ state๋ ์ํ ๋ณ๊ฒฝ ํจ์ ํธ์ถ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค. (๊ฐ์ ๋ก ๋ณ๊ฒฝX)
๐ฃ Props
โ๏ธ ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ
โ๏ธ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ
โ๏ธ ๊ฐ์ฒด ํํ์ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ(ํจ๋ถ๋ก ๋ณ๊ฒฝ๋์ง ์์์ผ ํจ)
๐ฃ Props ์ฌ์ฉ๋ฒ
1๏ธโฃ ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๊ณ ์ ํ๋ ๊ฐ๊ณผ ์์ฑ์ ์ ์ํ๋ค.
2๏ธโฃ props๋ฅผ ์ด์ฉํ์ฌ ์ ์๋ ๊ฐ๊ณผ ์์ฑ์ ์ ๋ฌํ๋ค.
3๏ธโฃ ์ ๋ฌ๋ฐ์ props๋ฅผ ๋ ๋๋งํ๋ค.
โฐ <Parent>, <Child> ์ปดํฌ๋ํธ ์ ์ธ
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child />
</div>
);
};
function Child() {
return (
<div className="child"></div>
);
};
โฐ ์์ฑ ๋ฐ ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ
<Child text={"I'm the eldest child"} />
โฐ <Parent> ์ปดํฌ๋ํธ์์ ์ ๋ฌํ ๋ฌธ์์ด์ <Child> ์ปดํฌ๋ํธ์์ ๋ฐ์์ค๊ธฐ -> ํจ์ ๋งค๊ฐ๋ณ์ ์ฒ๋ผ ์ ๋ฌ
โฐ props๋ ๊ฐ์ฒด์ด๋ฉฐ { key: value } ์ ํํ๋ฅผ ๋๊ธฐ ๋๋ฌธ์ props.text๋ฅผ ์ค๊ดํธ๋ก ๋ฌถ์ด์ ์ฌ์ฉ๊ฐ๋ฅ
function Child(props) {
return (
<div className="child">
<p>{props.text}</p>
</div>
);
};
โ props๋ฅผ ์ ๋ฌํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ => props.children
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>
);
};
โฐ ์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ ์ฌ์ด์ value๋ฅผ ๋ฃ์ด ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
โฐ ์ด ๊ฒฝ์ฐ props.children์ผ๋ก ํด๋น value์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
๐ฃ React์ ์ด๋ฒคํธ ์ฒ๋ฆฌ
โ๏ธ ์นด๋ฉ ์ผ์ด์ค ์ฌ์ฉ
โ๏ธ JSX๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ ํจ์๋ฅผ ์ ๋ฌํ๋ค.
//HTML ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์
<button onclick="handleEvent()">Event</button>
//React ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์
<button onClick={handleEvent}>Event</button>
1๏ธโฃ onChange
function NameForm() {
const [name, setName] = useState("");
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
<h1>{name}</h1>
</div>
)
};
โฐ input์ ํ ์คํธ๊ฐ ๋ฐ๋ ๋๋ง๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
โฐ onChange ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด e.target.value๋ฅผ ํตํด ์ด๋ฒคํธ ๊ฐ์ฒด์ ๋ด๊ฒจ์๋ input๊ฐ์ ์ฝ์ด์ฌ ์ ์๋ค.
โฐ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด hangleChangeํจ์๊ฐ ์๋ํ๋ฉฐ, ์ด๋ฒคํธ ๊ฐ์ฒด์ ๋ด๊ธด input๊ฐ์ setState๋ฅผ ํตํด ์๋ก์ด state๋ก ๊ฐฑ์ ํ๋ค.
2๏ธโฃ onClick
function NameForm() {
const [name, setName] = useState("");
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
<input type="text" value={name} onChange={handleChange}></input>
<button onClick={alert(name)}>Button</button>
<h1>{name}</h1>
</div>
);
};
โฐ ์ ์ฝ๋๋ ๋ฒํผ์ ํด๋ฆญ ํ ๋๊ฐ ์๋, ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋์ alert๊ฐ ์คํ๋๋ค.
โฐ ๋๋ฌธ์ onClick ์ด๋ฒคํธ์ ํจ์๋ฅผ ์ ๋ฌํ ๋๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ์๋๋ผ ๋ฆฌํด๋ฌธ ์์์ ํจ์๋ฅผ ์ ์ํ๊ฑฐ๋, ๋ฆฌํด๋ฌธ ์ธ๋ถ์์ ํจ์๋ฅผ ์ ์ํ ํ ์ด๋ฒคํธ์ ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํด์ผ ํ๋ค.
//ํจ์ ์์ฒด๋ฅผ ์ ๋ฌํ๊ธฐ
const handleClick = () => {
alert(name);
};
return (
<div>
...
<button onClick={handleClick}>Button</button>
...
</div>
);
};
๐ฃ React์ ๋ฐ์ดํฐ ํ๋ฆ
โ๏ธ ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ด์ ์, ์ปดํฌ๋ํธ๋ฅผ ๋จผ์ ๋ง๋ค๊ณ ์กฐ๋ฆฝํ๋ค(์ํฅ์)
โ๏ธ ํ๋์ ์ปดํฌ๋ํธ๋ ํ ๊ฐ์ง ์ผ๋ง ํ๋ค.
โ๏ธ ๋ฐ์ดํฐ๋ ์์์ ์๋๋ก ํ๋ฅธ๋ค(ํํฅ์) -> ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
โ๏ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ์ฃผ์ฒด๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋๋ค.
โ๏ธ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ state๋ก ๋ ํ์๋ ์๋ค -> state๋ ์ต์ํํ๋ ๊ฒ์ด ์ข๋ค.
โ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ state๋ก ๋์ด์ผ ํ ๊น?
1๏ธโฃ ๋ถ๋ชจ๋ก๋ถํฐ props๋ฅผ ํตํด ์ ๋ฌ๋ฉ๋๊น? -> state(X)
2๏ธโฃ ์๊ฐ์ด ์ง๋๋ ๋ณํ์ง ์๋์? -> state(X)
3๏ธโฃ ์ปดํฌ๋ํธ ์์ ๋ค๋ฅธ state๋ props๋ฅผ ๊ฐ์ง๊ณ ๊ณ์ฐ ๊ฐ๋ฅํ๊ฐ์? -> state(X)
โ๏ธ ๋ ๊ฐ์ ์์ ์ปดํฌ๋ํธ๊ฐ ํ๋์ ์ํ์ ์ ๊ทผํ๊ณ ์ ํ ๋๋ ๋ ์์์ ๊ณตํต ๋ถ๋ชจ ์ปดํฌ๋ํธ(๊ณตํต ์์ ์ปดํฌ๋ํธ)์ state๋ฅผ ์์น์์ผ์ผ ํ๋ค.
'CodeStates > learning contents' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S2) Unit 7. [HTTP/๋คํธ์ํฌ] ๋ธ๋ผ์ฐ์ ์ ์๋ ์๋ฆฌ(๋ณด์ด์ง ์๋ ๊ณณ) (0) | 2023.01.30 |
---|---|
S2) Unit 7. [HTTP/๋คํธ์ํฌ] HTTP (0) | 2023.01.30 |
S2) Unit 5. [React] React SPA (0) | 2023.01.25 |
S2) Unit 4. [React] ๊ธฐ์ด (0) | 2023.01.20 |
S2) Unit 3. [JS] fetch & Axios (0) | 2023.01.19 |