์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- props drilling
- fetch api
- css
- html
- jsx
- ๊ณ ์ฐจํจ์
- ์ปดํจํฐ ๊ณตํ
- ํผํฐ ๋ชจ๋น
- Study
- Effect Hook
- WEB
- git
- State
- ํ ์คํธ ์์
- ํผํฐ ๋ชจ๋น์ ๋ฒ์ง ๋ชจํ
- ์ ์ด์ฝฅ ๋์จ
- ๋ฒ์ง ๋ชจํ
- Lifting state
- JavaScript
- React
- Cmarket
- ์คํ ์ด์ธ ์ฝ๋
- ํ๋ก๊ทธ๋๋จธ์ค
- prototype
- ์คํ ์ด์ธ ์ฝ๋42๊ธฐ
- BFS์ DFS
- ์๋งจํฑ์์
- css animation
- ๋ฒ๋ค๋ง
- wai-aria
- Today
- Total
roqkf
[React] React State & Props ๋ณธ๋ฌธ

[Props์ State]
Props
: ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ
State
: ๋ด๋ถ์์ ๋ณํํ๋ ๊ฐ
: ์ด๋ฉด์ ๋ณํ ์ ์๋ ๊ฐ
: ์ปดํฌ๋ํธ์ ์ฌ์ฉ ์ค ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ
[State์ Props ๊ตฌ๋ณํด ๋ณด๊ธฐ!]
์ด๋ฆ: Props
์ฑ๋ณ: Props
๋์ด: State
ํ์ฌ ์ฌ๋ ๊ณณ: State
์ทจ์
์ฌ๋ถ: State
๊ฒฐํผ/์ฐ์ ์ฌ๋ถ: State
Props
๐น Props์ ํน์ง
- ์ปดํฌ๋ํธ์ ์์ฑ(property)์ ์๋ฏธ
์ฑ๋ณ์ด๋ ์ด๋ฆ์ฒ๋ผ ๋ณํ์ง ์๋ ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์์ ํด๋น ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง ์์ฑ์ ํด๋น
- ๋ถ๋ชจ ์ปดํฌ๋ํธ(์์ ์ปดํฌ๋ํธ)๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๊ฐ
React ์ปดํฌ๋ํธ๋ JS ํจ์์ ํด๋์ค๋ก, Props๋ฅผ ํจ์์ ์ ๋ฌ์ธ์์ฒ๋ผ ์ ๋ฌ๋ฐ์์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก
ํ๋ฉด์ ์ด๋ป๊ฒ ํ์๋๋์ง๋ฅผ ๊ธฐ์ ํ๋ React ์๋ฆฌ๋จผํธ๋ฅผ ๋ฐํํ๋ค.
์ฆ, ์ปดํฌ๋ํธ๊ฐ ์ต์ด ๋ ๋๋ง ๋ ๋ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ด๊ธฐ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ๊ฐ์ฒด ํํ
Props๋ก ์ด๋ค ํ์
์ ๊ฐ๋ ๋ฃ์ด ์ ๋ฌํ ์ ์๊ฒ Props๋ ๊ฐ์ฒด์ ํํ๋ฅผ ๊ฐ์ง๋ค.
- Props๋ ์ฝ๊ธฐ ์ ์ฉ
์ฑ๋ณ์ด๋ ์ด๋ฆ๊ณผ ๊ฐ์ด ์ธ๋ถ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์์ ๋ณํ์ง ์๋ ๊ฐ์ด๋ค.
๊ทธ๋์ Props๋ ํจ๋ถ๋ก ๋ณ๊ฒฝ์ด ๋ ์ ์๋ ์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด์ด๋ค.
์ฝ๊ธฐ ์ ์ฉ ๊ฐ์ฒด๊ฐ ์๋๋ผ๋ฉด Props๋ฅผ ์ ๋ฌ๋ฐ์ ํ์ ์ปดํฌ๋ํธ ๋ด์์ Props๋ฅผ ์ง์ ์์ ํ๊ฒ ๋ ๋,
Props๋ฅผ ์ ๋ฌํ ์์ ์ปดํฌ๋ํธ์ ๊ฐ์ ์ํฅ์ ๋ฏธ์น ์ ์๊ฒ ๋๋ค.
์ฆ, ๊ฐ๋ฐ์๊ฐ ์๋ํ์ง ์์ side effect๊ฐ ์๊ธฐ๊ณ ์ด๋ React์ ๋จ๋ฐํฅ, ํํฅ์ ๋ฐ์ดํฐ ํ๋ฆ ์์น์ ์๋ฐฐ๋๋ค.
๐น Props ์ฌ์ฉ๋ฒ
- ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๊ณ ์ํ๋ ๊ฐ๊ณผ ์์ฑ์ ์ ์
- props๋ฅผ ์ด์ฉํด ์ ์๋ ๊ฐ๊ณผ ์์ฑ ์ ๋ฌ
- ์ ๋ฌ๋ฐ์ props ๋ ๋๋ง
function Parent() {
// Parent ์ปดํฌ๋ํธ ์์ฑ
return (
<div className="parent">
<h1>I'm the parent</h1>
{/* HTML ์์ฑ๊ณผ ๊ฐ ๋ค๋ฃจ๋ ๋ฒ, <a> ์์์ href ์์ฑ์ ๋ค์ด๋ฒ ๋งํฌ ๊ฐ์ ์ค */}
<a href="https://www.naver.com/">Click me to visit Naver</a>
{/* React์์ JSX ์์ฑ ๋ฐ ๊ฐ์ ํ ๋นํ๋ ๋ฐฉ๋ฒ : <Child attribute={value} /> */}
<Child text={"I'm the eldest child"} />
<Child />
</div>
);
}
// Child ์ปดํฌ๋ํธ ์์ฑ
function Child(props) {
return (
<div className="child">
<p>{props.tect}</p>
</div>
);
}
// props๋ฅผ ์ ๋ฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ: ์ฌ๋ ํ๊ทธ์ ๋ซ๋ ํ๊ทธ ์ฌ์ด์ 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>
);
};
Action item
- App ์ปดํฌ๋ํธ์ ์๋ itemOne๊ณผ itemTwo๋ฅผ Learn ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ์ฌ, "React๋ฅผ ๋ฐฐ์ฐ๊ณ ์์ต๋๋ค"๋ผ๋ ๋ฌธ์์ด์ด rendering ๋๋๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ
State
- state๋ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๋ณํ ์ ์๋ ๊ฐ์ด๋ค. ์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ฌด์์ ์ํ๋ผ๊ณ ํ ์ ์์๊น?
ex) ์ผํ๋ชฐ ์ฅ๋ฐ๊ตฌ๋
์๋น์๊ฐ ๊ตฌ๋งคํ ๋ฌผ๊ฑด๊ณผ ๋น์ฅ ๊ตฌ๋งคํ์ง ์์ ๋ฌผ๊ฑด์ ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌํ์ฌ ๊ตฌ๋ถ ์ง๋๋ค.
์ด๋ฅผ ์ฅ๋ฐ๊ตฌ๋ ๋ด์์ ์ํ๋ก ๊ตฌ๋ถํ๋ค๋ฉด "check๋ ์ํ"์ "check ๋์ง ์์ ์ํ"์ด๋ค.
์ฒดํฌ๋ ์ํ์ ์ฒดํฌ๋์ง ์์ ์ํ์ ๊ฐ์ด ์ปดํฌ๋ํธ ๋ด์์ ๋ณํ ์ ์๋ ๊ฐ(์ํ)๋ React state๋ก ๋ค๋ค์ผ ํ๋ค.
๐น useState ์ฌ์ฉ๋ฒ
- useState ๋ถ๋ฌ์ค๊ธฐ
- React์์๋ state๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ์ค ํ๋๋ก useState ํจ์๋ฅผ ์ ๊ณต, ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์ React๋ก๋ถํฐ useState๋ฅผ ๋ถ๋ฌ์์ผ ํ๋ค. import ํค์๋๋ฅผ ํตํด useState ๋ถ๋ฌ์จ๋ค.
import { useState } from "react";
- useState ํธ์ถํ๊ธฐ
- useState๋ฅผ ์ปดํฌ๋ํธ ์์์ ํธ์ถํ๋ค๋ ๊ฒ์ "state" ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ฉฐ, ๋ณ์๋ช ์ ์ง๊ณ ์ถ์ ๋ณ์๋ช ์ผ๋ก ์ง์ด๋ ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ณ์๋ฉด ํจ์๊ฐ ๋๋ ๋ ์ฌ๋ผ์ง์ง๋ง, state ๋ณ์๋ React์ ์ํด์ ํจ์๊ฐ ๋๋๋ ์ฌ๋ผ์ง์ง ์๋๋ค.
function CheckboxExample() {
// ์๋ก์ด state ๋ณ์๋ฅผ ์ ์ธํ๊ณ , isChecked ๋ผ ๋ถ๋ฅด๊ฒ ์ต๋๋ค.
// 1๋ฒ ์ฝ๋๋ฅผ ํ์ด์ฐ๋ฉด
const [isChecked, setIsChecked] = useState(false); // 1๋ฒ
// isChecked: state๋ฅผ ์ ์ฅํ๋ ๋ณ์
// setIsChecked: state isChecked๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์
// useState : state hook
// false: state ์ด๊น๊ฐ
//...
// 2๋ฒ ์ฝ๋์ ๊ฐ๋ค.
const stateHookArray = useState(false); // 2๋ฒ
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
- useState๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ๋ฐฐ์ด์ ๋ฐํํ๊ฒ ๋๋๋ฐ ์ด ๋ฐฐ์ด์ 0๋ฒ์งธ ์์๋ ํ์ฌ state ๋ณ์์ด๊ณ , 1๋ฒ์งธ ์์๋ ์ด ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์์ด๋ค. useState์ ์ธ์๋ก ๋๊ฒจ์ฃผ๋ ๊ฐ์ state์ ์ด๊ธฐ๊ฐ์ด๋ค.
const [state ์ ์ฅ๋ณ์, state ๊ฐฑ์ ํจ์] = useState(์ํ ์ด๊ธฐ๊ฐ)
์์ ์ฝ๋๋ ์๋์ ๊ฐ๋ค
const arr = useState(์ํ์ด๊ธฐ๊ฐ);
const state ์ ์ฅ๋ณ์ = arr[0];
const state ๊ฐฑ์ ํจ์ = arr[1];
- state ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด JSX ์๋ฆฌ๋จผํธ ์์ ์ง์ ๋ถ๋ฌ์์ ์ฌ์ฉ
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
- state ๊ฐฑ์ ํ๊ธฐ
- state๋ฅผ ๊ฐฑ์ ํ๋ ค๋ฉด state๋ฅผ ๊ฐฑ์ ํ ์ ์๋ state ๊ฐฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
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 ์ปดํฌ๋ํธ๋ tate๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋กญ๊ฒ ํธ์ถ๋๋ฉฐ, ๋ฆฌ๋ ๋๋งํ๋ค.
+ React state๋ ์ํ ๋ณ๊ฒฝ ํจ์ ํธ์ถ๋ก ๋ณ๊ฒฝํด์ผ ํ๋ค.
const [isChecked, setIsChecked] = useState(false);
// isChecked์ ์ฌํ ๋นXX setIsChecked ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ๋ณ๊ฒฝ์์ผ์ผ ํ๋ค.
์ฐธ๊ณ : ์ฝ๋์คํ ์ด์ธ
'๐ป Development > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React ๋ฐ์ดํฐ ํ๋ฆ๊ณผ Lifting state up (0) | 2022.12.11 |
---|---|
[React] React์์์ State ์ด๋ฒคํธ ์ฒ๋ฆฌ (1) | 2022.11.30 |
[React] React Router (0) | 2022.11.30 |
[React] SPA (0) | 2022.11.30 |
[React] key JSX ์์ฑ์ด ํ์ํ ์ด์ (0) | 2022.11.27 |