(์์๋ ์ํ์ง๋ง ๋ฒ์จ ํ๊ธฐ ์ซ์)
์ค๋์ ๋ด๊ฐ ๋ง๋ค๊ณ ์๋ ๊ฐ์ธ ํ๋ก์ ํธ ๋ด์์ ์ฌ์ฉ๋๋ useState์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค(๋๋ฅผ ์ํ๊ฒ)
1. State๋ฅผ ๋จผ์ ์์์ผ ํ๋ค
React ๊ณต์๋ฌธ์์์ state๋ ์ปดํฌ๋ํธ ๋ณ ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ์ค๋ช ํ๋ค. ์ฆ, ์ปดํฌ๋ํธ๋ ํ์ฌ ์ ๋ ฅ๊ฐ, ํ์ง ์ด๋ฏธ์ง, ์ฅ๋ฐ๊ตฌ๋ ๊ฐ์ ๊ฒ์ "๊ธฐ์ต"ํ๊ณ ์์ด์ผ ํ๋๋ฐ, ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ state๋ผ๊ณ ์ ์ธํ๋ ๊ฒ์ด๋ค.
/*state๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ useState๊ฐ ๋ฐ๋์ ํ์ํ๋ค.*/
import {useState} from 'react';
/*์์์ ๋ณ์ ํ๋ ์ ์ธ*/
let count = 0;
/*[state๋ณ์, setterํจ์ ์ ์ธ]*/
/*์ฌ๊ธฐ์ [] ๋ฌธ๋ฒ์ ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด๋ผ๊ณ ํ๋ฉฐ, useState๊ฐ ๋ฐํํ๋ ๋ฐฐ์ด์๋ ํญ์ 2๊ฐ์ ํญ๋ชฉ์ด ์๋ค.*/
const [count, setCount] = useState(0)
/*setCount ๋์ ์ ์ธ*/
function handleClick(){
setCount(count+1);
}
count์๋ ํด๋ฆญํ ๋ ๋ง๋ค +1๋์ด ๊ฐ์ด ์ง์์ ์ผ๋ก ๋ฐ๋๋ค. ์ด๋ ๋ฏ ์ง์์ ์ผ๋ก ๋ณํ ์ ์๋ ๊ฐ์ ๋ด๋ ๊ฒ์ด state์ด๋ค.
2. ๊ทธ๋ผ useState๋ ๋ฌด์์ธ๊ฐ
๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์ "useState๋ ์ปดํฌ๋ํธ์ state๋ณ์๋ฅผ ์ถ๊ฐํ ์ ์๋ React Hook์ ๋๋ค."๋ผ๊ณ ๋ช ์๋์ด ์์ง๋ง, ์ด๋ณด ๋ฆฌ์กํธ ์์ฝ์ด์ธ ๋๋ ์์งํ ๋ญ๋ผ๋๊ฑด์ง ์กฐ๋ ๋ชฐ๋ผ์ ์งํผํฐ ์ฐ์ต๋ํํ ํฌํ์ณค๋ค.
์งํผํฐ ์ฐ์ต๋๐ฝ ์,
์์ํด๋ณด์. ๋ค๊ฐ ๊ฒ์์ ํ๊ณ ์๋๋ฐ, ๊ฒ์์์ ์ ์๋ฅผ ์ ์ฅํด์ผ ํ๋ค๊ณ ์๊ฐํด๋ด.
์ ์๊ฐ ๊ณ์ ๋ณํ ์ ์์ผ๋๊น ํ์ฌ ์ ์๋ฅผ ์ ์ฅํ๊ณ , ์ ์๊ฐ ๋ณํ๋ฉด ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์ด ํ์ํด.
๋ฐ๋ก useState๊ฐ ๊ทธ๋ฐ ์ญํ ์ ํด!
๋ผ๊ณ ํ์ จ๋ค.
๋ฐ๋ผ์ useState๋ ์ง์์ ์ผ๋ก ๋ณํ๋ ๊ฐ์ ์ ๋ฐ์ดํธ ํด์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋๋ react Hook์ด๋ผ ๋ณผ ์ ์๋ค. ์ข ๋ ์์ธํ๊ฒ ์ค๋ช ํ์๋ฉด,
const [score, setScore] = useState(0)
- score : ํ์ฌ ์ ์๋ฅผ ๋ํ๋ด๋ state๋ณ์
- setScore : score์ ์ ๋ฐ์ดํธ ํ ์ ์๋ ํจ์
- useState(0) : ์ ์๋ฅผ 0์์๋ถํฐ ์์ํ ์ ์๋๋ก ์ด๊ธฐํํ ๊ฒ
์ ์๋ฅผ ๋ฐ๊พธ๊ธฐ ์ํด์ setScore์ ์ธํ ํด์ผ ํ๋ค.
setScore(score + 10)
์ด๋ ๊ฒ ์์ฑํ๋ค๋ฉด ํ์ฌ ์ ์(score)์ +10์ ๋ํ์ฌ ์๋ก์ด ์ ์๋ฅผ ๋ฐํํด์ค ์ ์๋ค.
3. useState์ ํน์ง
๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฐ์ด ๋ฐ๋ ๋ ๋ง๋ค ์๋์ผ๋ก ํ๋ฉด์ ์ ๋ฐ์ดํธ ๋๋ค. โญโญโญ
- ํ๋ฒ ๊ฐ์ด ๋ฐ๋๋ฉด, ํ๋ฉด์ ๊ทธ ๋ฐ๋ ๊ฐ์ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ค๋ค.
- 1๏ธโฃ์ํ๊ฐ, 2๏ธโฃ๊ทธ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ ํจ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
- ์ํ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ ์ ์๋ค.
const [name, setName] = useState('')
const [age, setAge] = useState(0)
4. "use"๋ก ์์ํ๋ ๋ชจ๋ ํจ์๋ฅผ Hook์ด๋ผ๊ณ ํ๋ค
๊ทธ๋์ React์์๋ useEffect, useRef ๋ฑ๋ฑ์ ๋ง๋ ์ ์๋ค. ๊ทธ์น๋ง ์ด๊ฑด ํ์ฌ(25.01.28 ๊ธฐ์ค) ๊ฐ ํ์์ useState์ด์ธ์ ๋ค๋ฅธ ๊ฑด ์ฌ์ฉํ์ง ์์์ผ๋ฏ๋ก ๋์ค์ ์ฌ์ฉ๋ ๋ ๊ฐ์ด ์ ๋ฆฌํ๊ฒ ๋ค!
์ฃผ์์ ?
Hook์ ์ปดํฌ๋ํธ์ ์ต์์ ์์ค(ex. App.jsx) ํน์ ์ปค์คํ ํ ์์๋ง ์ฌ์ฉํ ์ ์๋ค?
์ด๊ฒ ๋ญ์๋ฆฌ๋ ์นด๋ฉด, ์ปดํฌ๋ํธ ํจ์ ์์์ ๋งจ ์์ชฝ, ์ฆ ๋ ๋๋ง ๋๋ JSX ์ฝ๋ ์คํ ์ ์ ํ ์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๋ป์ด๋ค.


ํ๋ฉด์์ ๋ ๋๋ง ๋๋ ๊ฑด return๋ฌธ ๋ด๋ถ์ ์๋ ๊ฒ์ด๋ฏ๋ก, ์ปดํฌ๋ํธ์์ ๊ฐ์ฅ ์๋จ์ ์ ์ธ๋์ด์ผ react Hook์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ๋ผ ์ปค์คํ ํ ์ด๋ ๋ฌด์์ธ๊ฐ?
React์์ Hook์ ์ด์ฉํด ๊ธฐ๋ฅ์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ํจ์์ด๋ค. React์์ useState๋ useEffect ์ด์ธ์๋ ์ฌ์ฉ์๊ฐ ์ง์ Hook์ ๋ง๋ค์ด์ ์ฌ๋ฌ ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ๋ ์ ์๋ค. ์์๋ก ๋ณด๋ ๊ฒ์ด ์ดํด๊ฐ ๋ ๋น ๋ฅผ ๊ฑฐ ๊ฐ๋ค.
/*useCounter์ด๋ผ๋ ์ปค์คํ
ํ
๋ง๋ค๊ธฐ*/
function useCounter(args){
const [count, setCount] = useState(args)
function increment(){
setCount(count + 1)
}
function decrement(){
setCount(count - 1)
}
return {count, increment, decrement}
}
function myComponent(){
const {count, increment, decrement} = useCounter // ์ปค์คํ
ํ
์ฌ์ฉ
return(
<div>
<h3>{count}</h3>
<button onClick={increment}>์ฆ๊ฐ</button>
<button onClick={decrement}>๊ฐ์</button>
</div>
)
}
์ด๋ฐ์์ผ๋ก ๋ด๊ฐ ์ํ๋ ๊ธฐ๋ฅ์ ์ปค์คํ ํด์ ์ฌ์ฉํ ์ ์๋ค.
[์ถ์ฒ]
state: https://ko.react.dev/learn/state-a-components-memory
State: ์ปดํฌ๋ํธ์ ๊ธฐ์ต ์ ์ฅ์ – React
The library for web and native user interfaces
ko.react.dev
'Frontend๐จ > Reactโ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [React] useEffect๋? (+ useState, useReducer๊ณผ ํจ๊ป ์ ๋ฆฌ) (0) | 2025.05.15 |
|---|---|
| [React] useReducer์ ๋ํด ๊ณต๋ถํ์ (0) | 2025.03.03 |