*React state ๊ด๋ จ ์์ฑ๊ธ โถ๏ธ์ด์ ์ ๋ฆฌ๊ธ ์ฐธ๊ณ
React๋ 16.8 ๋ฒ์ ๋ถํฐ Hook์ด๋ ๊ฐ๋
์ด ์๋ก ์ถ๊ฐ๋์๋ค. Hook์ ํจ์ํ ์ปดํฌ๋ํธ์์ React state์ ์๋ช
์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ์ฐ๋ํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์๋ก, React์์ ์ ๊ณตํ๋ ๋ด์ฅ Hook(useState
, useEffect
๋ฑ)๊ณผ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ์ ์๋ Custom Hooks๊ฐ ์๋ค.
function App() {
// useState ์ฌ๋ฌ๋ฒ ํธ์ถ ๊ฐ๋ฅ
const [name, setName] = useState('');
const [age, setAge] = useState(0);
... ์ดํ ์๋ต
function App() {
// useState ์ฌ๋ฌ๋ฒ ํธ์ถ ๊ฐ๋ฅ
if(true){
// ๋ฐ๋ณต๋ฌธ ์์์ hook ํธ์ถ = ์๋X
const [bar, setBar] = useState(0)
}
... ์ดํ ์๋ต
useState
hook์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฐ์ state์ ๋ํ ๊ฐ๋
์ ์ดํดํด์ผํ๋ค.
์ปดํฌ๋ํธ๋ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํน์ ํ ๊ฐ (์
๋ ฅ๊ฐ, ์ด๋ฒคํธ) ๋ฑ์ ๊ธฐ์ตํด์ผํ๋๋ฐ, React๋ ์ด๋ฅผ state๋ผ๊ณ ์ ์ํ๋ค. ์ฆ, React ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง ์ ์๋ ๋์ ์ธ ์ํ๊ฐ์ด state์ด๋ค.
useState
๋?useState
๋ ์ปดํฌ๋ํธ์ ์ํ(state) ๋ณ์๋ฅผ ์ถ๊ฐ/๊ด๋ฆฌํ ์ ์๋ Hook์ด๋ค.
useState
์ฌ์ฉ๋ฒ์ปดํฌ๋ํธ์ ์ต์์ ๋ ๋ฒจ์์ useState
๋ฅผ ํธ์ถํ์ฌ state ๋ณ์๋ฅผ ์ ์ธํ๋ค.
//๊ตฌ์กฐ๋ถํด ํ ๋น์ ์ฌ์ฉํ์ฌ State ๋ณ์์ ์ด๋ฆ์ ์ง์
const [๋ณ์๋ช
, setํจ์๋ช
] = useState(๋งค๊ฐ๋ณ์=์ด๊ธฐ๊ฐ)
//์์
import { useState } from 'react';
function App = () => {
const [name, setName] = useState('');
const [age, setAge] = useState(0);
... ์ดํ ์๋ต
useState
๊ฐ ๋๋ฌด ๋ง์๊ฑฐ๊ฐ์๋ฐ?useState
์์ฑfunction UserCard() {
const [name, setName] = useState("ํ๊ธธ๋");
const [age, setAge] = useState(20);
const [address, setAddress] = useState("์์ธ")
return (
<div>
<h1>์ด๋ฆ: {name}</h1>
<h2>๋์ด: {age}</h2>
<h3>ํ๊ต: {school}</h3>
<button
onClick={() => {
setName("ํ๊ธธ์");
setAge(22);
setAddress("๋ถ์ฐ")
}}
>
์ฌ๋ ๋ณ๊ฒฝ
</button>
</div>
);
}
useState
์์ฑfunction UserCard() {
const [user, setUser] = useState({
name: "ํ๊ธธ๋",
age: 20,
address: "์์ธ",
});
return (
<div>
<h1>์ด๋ฆ: {user.name}</h1>
<h2>๋์ด: {user.age}</h2>
<h3>ํ๊ต: {user.address}</h3>
<button
onClick={() => {
setUser({
...user,
name: "ํ๊ธธ์",
address: "๋ถ์ฐ",
});
}}
>
์ฌ๋ ๋ณ๊ฒฝ
</button>
</div>
);
}
์์ ๊ฐ์ด, age์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด user ๊ฐ์ฒด๋ฅผ spread ์ํจ ํ, ๋ณ๊ฒฝ์ ์ํ๋ ๊ฐ๋ค์ ๋ค์ ์ ์ด์ฃผ๋ฉด ๋๋ค. ์ด ๊ณผ์ ์ "override"๋ผ๊ณ ํ๋๋ฐ, ๋ณ๊ฒฝํ์ง ์์ ๊ฐ์ ์ด์ ์ ์ํ์์ ๊ฐ์ ธ์จ๋ค.
useState
์ ํจ์ํ ์
๋ฐ์ดํธํจ์ํ ์ ๋ฐ์ดํธ๋ setํจ์์ ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ๋ฃ๋ ๊ฒ์ด๋ค. setํจ์์ ๊ฐ์ ๋ฃ์ด ์ฌ๋ฌ๋ฒ ์คํํ๋ฉด batch update๋ก ์ธํด ํ๋ฒ๋ง ์คํ๋๋ค. ํ์ง๋ง ํจ์ํ ์ ๋ฐ์ดํธ๋ก ์ฌ๋ฌ๋ฒ ์คํํ๋ฉด ๋ช ๋ น์ ๋ชจ์์ ์์ฐจ์ ์ผ๋ก ํ๋ฒ์ฉ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฐ์๋๋ค. ๋ํ, ๋ณ์๋ฅผ props๋ก ๋ด๋ ค์ฃผ์ง ์์๋ ํ์ ์ปดํฌ๋ํธ์์ ์ ์์ ์ผ๋ก ์๋ํ๋ค.
//example
const [count, setCount] = useState(0)
//์ผ๋ฐ์ ์ธ set
setCount(count + 1)
setCount(count + 1)
setCount(count + 1)
console.log(count) // 1 โถ๏ธ ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋ฒ๋ง ์๋ํ๋ค.
//ํจ์ํ ์
๋ฐ์ดํธ
setCount((prevํ์ฌ๊ฐ) => prevํ์ฌ๊ฐ + 1)
setCount((prevํ์ฌ๊ฐ) => prevํ์ฌ๊ฐ + 1)
setCount((prevํ์ฌ๊ฐ) => prevํ์ฌ๊ฐ + 1)
console.log(count) // 3 โถ๏ธ ์์ฐจ์ ์ผ๋ก ๋ชจ๋ ์คํ
useState
์ฌ์ฉ์ ์ฃผ์์ฌํญuseState React ๊ณต์ ๋ฌธ์
useState ์ฐธ๊ณ ์ฌ์ดํธ 1
useState ์ฐธ๊ณ ์ฌ์ดํธ 2
React Hook ์ฐธ๊ณ ์ฌ์ดํธ