๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ฐ์ด ์ฆ๊ฐํ๋ ๊ฐ๋จํ ์นด์ดํฐ ์์์ด๋ค.
import React, { useState } from 'react';
function Example() {
// "count"๋ผ๋ ์ ์ํ ๋ณ์๋ฅผ ์ ์ธํ๋ค
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
์ฌ๊ธฐ์ useState
๊ฐ ๋ฐ๋ก Hook
์ด๋ค. Hook์ ํธ์ถํด ํจ์ ์ปดํฌ๋ํธ(function component) ์์ state๋ฅผ ์ถ๊ฐํ๋ค. ์ด state๋ ์ปดํฌ๋ํธ๊ฐ ๋ค์ ๋ ๋๋ง ๋์ด๋ ๊ทธ๋๋ก ์ ์ง๋๋ค. useState
๋ ํ์ฌ์ state ๊ฐ๊ณผ ์ด ๊ฐ์ ์
๋ฐ์ดํธํ๋ ํจ์๋ฅผ ์์ผ๋ก ์ ๊ณตํ๋ค. ์ฐ๋ฆฌ๋ ์ด ํจ์๋ฅผ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ ๋ค๋ฅธ ๊ณณ์์ ํธ์ถํ ์ ์๋ค. ์ด๊ฒ์ class์ this.setState
์ ๊ฑฐ์ ์ ์ฌํ์ง๋ง, ์ด์ state์ ์๋ก์ด state๋ฅผ ํฉ์น์ง ์๋๋ค๋ ์ฐจ์ด์ ์ด ์๋ค.
useState๋ ์ด๋์๋ก ์ด๊ธฐ state ๊ฐ์ ํ๋ ๊ฐ์ง๋ค. ์นด์ดํฐ๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ ์์์์๋ ์ด๊ธฐ๊ฐ์ผ๋ก 0์ ๋ฃ์ด์ค ๊ฒ์ด๋ค. this.state์๋ ๋ฌ๋ฆฌ setState Hook์ state๋ ๊ฐ์ฒด์ผ ํ์๊ฐ ์๋ค. ๋ถ๊ฐ๋ฅํ๋ค๋ ์ด์ผ๊ธฐ๋ ์๋๋ค. ์ด ์ด๊ธฐ๊ฐ์ ์ฒซ ๋ฒ์งธ ๋ ๋๋ง์๋ง ๋ฑ ํ๋ฒ ์ฌ์ฉ๋๋ค.
ํ๋์ ์ปดํฌ๋ํธ ๋ด์์ State Hook์ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ ์๋ ์๋ค.
function ExampleWithManyStates() {
// ์ํ ๋ณ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ธํ๋ค
const [age, setAge] = useState(42);
const [fruit, setFruit] = useState('banana');
const [todos, setTodos] = useState([{ text: 'Learn Hooks' }]);
// ...
}
๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด(destructuring) ๋ฌธ๋ฒ์ useSate
๋ก ํธ์ถ๋ state ๋ณ์๋ค์ ๋ค๋ฅธ ๋ณ์๋ช
์ผ๋ก ํ ๋นํ ์ ์๊ฒ ํด์ค๋ค. ์ด ๋ณ์๋ช
์ useState API์ ๊ด๋ จ์ด ์๋ค. ๋์ React๋ ๋งค๋ฒ ๋ ๋๋งํ ๋ useState
๊ฐ ์ฌ์ฉ๋ ์์๋๋ก ์คํํ๋ค.
Hook์ ํจ์ ์ปดํฌ๋ํธ์์ React state์ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ(lifecycle features)์ "์ฐ๋(hook into)"ํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์ด๋ค. Hook์ class ์์์๋ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ๋์ class ์์ด React๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด๋ค.
React๋ useState
๊ฐ์ ๋ด์ฅ Hook์ ๋ช ๊ฐ์ ์ ๊ณตํ๋ค. ์ปดํฌ๋ํธ ๊ฐ์ ์ํ ๊ด๋ จ ๋ก์ง์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด Hook์ ์ง์ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
React ์ปดํฌ๋ํธ ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ๊ตฌ๋ ํ๊ณ , DOM์ ์ง์ ์กฐ์ํ๋ ์์ ์ ์ด์ ์๋ ์ข ์ข ํด๋ดค์ ๊ฒ์ด๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฐ ๋ชจ๋ ๋์์ "side effect"(๋๋ ์งง๊ฒ "effect")๋ผ๊ณ ํ๋ค. ์๋ํ๋ฉด ์ด๊ฒ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ํฅ์ ์ค ์ ์๊ณ , ๋ ๋๋ง ๊ณผ์ ์์๋ ๊ตฌํํ ์ ์๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Effect Hook, ์ฆ useEffect
๋ ํจ์ ์ปดํฌ๋ํธ ๋ด์์ ์ด๋ฐ side effects๋ฅผ ์ํํ ์ ์๊ฒ ํด์ค๋ค. React class์ componentDidMount
๋ componentDidUpdate
, componentWillUnmount
์ ๊ฐ์ ๋ชฉ์ ์ผ๋ก ์ ๊ณต๋์ง๋ง, ํ๋์ API๋ก ํตํฉ๋ ๊ฒ์ด๋ค. (useEffect ์ ์ธ ๊ฐ์ง ๋ฉ์๋๋ฅผ ๋น๊ตํ๋ ์์๋ Using the Effect Hook ๋ฌธ์๋ฅผ ์ฐธ๊ณ )