![[React] State](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD6N1Q%2FbtsGkvMsrjI%2FdIPv6D8SyivJa4UW0OCYMK%2Fimg.png)
๐ State๋ ๋ฌด์์ธ๊ฐ์?
๋ฆฌ์กํธ์์ state
๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฐ์ดํฐ์์. ์ด๋ ์ฌ์ฉ์์ ์ํธ์์ฉ์ด๋ ์๊ฐ์ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์๋ ์ ๋ณด๋ฅผ ๋งํด์. state
์ ๋ณํ๋ ๋ฆฌ์กํธ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํ๊ฒ ๋ง๋ค์ด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ์ต์ ์ํ๋ฅผ ๋ฐ์ํ๋๋ก ํด์.
์๋น์์ ์ฃผ๋ฌธ์๋ ์๋์ด ํ์ฌ ์ฃผ๋ฌธํ ์์์ ๋ํ๋ด์ฃ . ์๋์ด ์ฃผ๋ฌธ์ ๋ณ๊ฒฝํ๋ฉด, ์ฃผ๋ฌธ์์ ๋ด์ฉ๋ ๊ทธ์ ๋ง๊ฒ ๋ฐ๋์ด์. ์ฃผ๋ฌธ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ์ฃผ๋ฐฉ์ ๋ณ๊ฒฝ๋ ์ฃผ๋ฌธ์ ๋ง์ถฐ ์๋ก์ด ์์์ ์ค๋นํ๊ณ ์๋์๊ฒ ์ ๊ณตํด์.
๋ฆฌ์กํธ์ state
๋ ์ด์ ๋น์ทํด์. state
๋ ์ปดํฌ๋ํธ์ ํ์ฌ ์ํ(์: ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ํ
์คํธ, ์ ํํ ์ต์
๋ฑ)๋ฅผ ๋ํ๋ด์. ์ฌ์ฉ์๊ฐ ์ํธ์์ฉ(์: ๋ฒํผ ํด๋ฆญ, ํผ ์
๋ ฅ)์ ํตํด state
๋ฅผ ๋ณ๊ฒฝํ๋ฉด, ๋ฆฌ์กํธ๋ ๋ณ๊ฒฝ๋ state
์ ๋ง๊ฒ ์ปดํฌ๋ํธ๋ฅผ ์๋กญ๊ฒ ๋ ๋๋ง ํด์. ์ด ๊ณผ์ ์ ํตํด ์ฌ์ฉ์์๊ฒ ์๋ก์ด ํ๋ฉด์ด๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฌ์.
์ฆ, state
๋ ์ฌ์ฉ์์ ์ํธ์์ฉ์ ๋ฐ๋ผ ๋ณํํ๋ ์ปดํฌ๋ํธ์ '์ฃผ๋ฌธ์'์ ๊ฐ์ผ๋ฉฐ, ์ด ๋ณ๊ฒฝ์ ๋ฐ๋ผ ํ๋ฉด์ด ์
๋ฐ์ดํธ๋ผ์.
๐ฅ๏ธ state์ ์ฌ์ฉ ๋ฐฉ๋ฒ
๋ฆฌ์กํธ์์ state
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ฉด์๋ ๊ฐ๋ ฅํด์.
1. state ์ด๊ธฐํํ๊ธฐ
- ์ปดํฌ๋ํธ ๋ด์์
useState
ํ ์ ์ฌ์ฉํ์ฌstate
๋ฅผ ์ด๊ธฐํํด์.useState
๋state
๋ณ์์ ๊ทธ ๊ฐ์ ์ค์ ํ๋ ํจ์๋ฅผ ๋ฐํํด์.
import React, { useState } from 'react';
function MyComponent() {
// State ์ด๊ธฐํ
const [count, setCount] = useState(0);
}
2. state ์ฌ์ฉํ๊ธฐ
- ์ด๊ธฐํ๋
state
๋ ์ปดํฌ๋ํธ ๋ด์์ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ด์. ์ด๋ฅผ ํตํด UI๋ฅผ ๋์ ์ผ๋ก ๋ ๋๋ง ํ๊ฑฐ๋, ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ ์ ์์ด์.
function MyComponent() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
</div>
);
}
3. state ์ ๋ฐ์ดํธํ๊ธฐ
state
๋ฅผ ์ ๋ฐ์ดํธํ ๋๋setState
ํจ์๋ฅผ ์ฌ์ฉํด์. ์ด ํจ์๋ ์๋ก์ดstate
๊ฐ์ ์ธ์๋ก ๋ฐ์, ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋ง ํด์.
function MyComponent() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase</button>
</div>
);
}
state๋ ์ง์ ์์ ํ๋ฉด ์ ๋ผ์! ๋์ , setState ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํด์.
๐ค state vs JavaScript
๋ฆฌ์กํธ์ state
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ์ผ๋ง๋ ๊ฐํธํ์ง ํ์ธํด ๋ณผ๊ฒ์.
1. state๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ ์นด์ดํฐ
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>Count: {count}</p>
<button onClick={() => setCount(count + 1)}>Increase</button>
</div>
);
}
์ด ์ฝ๋์์ count๋ ์นด์ดํฐ์ ํ์ฌ ๊ฐ์ ๋ํ๋ด๋ฉฐ, setCount ํจ์๋ ํด๋ฆญ ์ด๋ฒคํธ์ ๋ฐ์ํ์ฌ count ๊ฐ์ ์ ๋ฐ์ดํธํฉ๋๋ค. ๋ฆฌ์กํธ๋ state์ ๋ณ๊ฒฝ์ ๊ฐ์งํ๊ณ ์๋์ผ๋ก UI๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค.
2. JavaScript๋ก ๊ตฌํํ ์นด์ดํฐ
<!DOCTYPE html>
<html>
<body>
<p id="counter">Count: 0</p>
<button id="increaseButton">Increase</button>
<script>
let count = 0;
document.getElementById('increaseButton').addEventListener('click', function() {
count++;
document.getElementById('counter').innerText = 'Count: ' + count;
});
</script>
</body>
</html>
}
์ด ์์์์๋ count ๋ณ์๋ฅผ ์ง์ ๊ด๋ฆฌํ๊ณ , ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ํ, ์นด์ดํฐ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด DOM ์์๋ฅผ ๋งค๋ฒ ์ฐพ์์ผ ํฉ๋๋ค.
3. ๋น๊ต
- ๋ฆฌ์กํธ: ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ด์์. ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฆฌ์กํธ๊ฐ ์๋์ผ๋ก UI๋ฅผ ์ ๋ฐ์ดํธํด์.
- ์๋ฐ์คํฌ๋ฆฝํธ: ์ํ ๊ด๋ฆฌ์ UI ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํด์. ์ด๋ ์ฝ๋๊ฐ ๋ ๋ณต์กํ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์์ ธ์.
๐จ ์ฃผ์ํ ์
- ์ง์ ์์ ํ์ง ์๊ธฐ: ๋ฆฌ์กํธ์
state
๋ ์ง์ ์์ ํด์๋ ์ ๋ผ์. ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ํญ์setState
ํจ์๋useState
ํ ์ ์ ๋ฐ์ดํธ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํด์. ์ง์ ์์ ํ๋ฉด ๋ฆฌ์กํธ๊ฐ ์ํ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํด UI๊ฐ ์ ๋ฐ์ดํธ๋์ง ์์์. - ๋น๋๊ธฐ์ ์
๋ฐ์ดํธ:
state
์ ์ ๋ฐ์ดํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ์ผ์ด๋์. ๋ฐ๋ผ์setState
๋ฅผ ํธ์ถํ ์งํ์state
๊ฐ ๋ฐ๋ก ์ ๋ฐ์ดํธ๋์ง ์์ ์ ์์ด์. ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ๋ก์ง์ ์์ฑํด์ผ ํด์. - ์ด๊ธฐ ์ํ์ ์ค์์ฑ:
useState
๋ฅผ ์ฌ์ฉํ ๋ ์ด๊ธฐ ์ํ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํด์. ์ด๋ ์ปดํฌ๋ํธ์ ์ด๊ธฐ ๋ ๋๋ง ์state
์ ๊ฐ์ ๊ฒฐ์ ํด์. - ์ํ ์์กด์ฑ ์ฃผ์:
state
๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์ ๋ด์์ ํ์ฌstate
์ ์์กดํ๋ ๊ฒฝ์ฐ,state
์ ์ต์ ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํด์. ์ด๋ฅผ ์ํด ํจ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์ด์. - ๋ถํ์ํ ๋ ๋๋ง ๋ฐฉ์ง:
state
๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ ๋๋ง๋ผ์. ๋ฐ๋ผ์ ๋ถํ์ํ ๋ ๋๋ง์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ์คํ๊ฒ ๊ด๋ฆฌํด์ผ ํด์. - ๋ณต์กํ ์ํ ๊ด๋ฆฌ: ๋ณต์กํ ์ํ ๋ก์ง์
useReducer
ํ ์ด๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ ์ ์์ด์.
๐ ๊ฒฐ๋ก
state
๋ ๋ฆฌ์กํธ์์ ์ปดํฌ๋ํธ์ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ํต์ฌ์ ์ธ ๋ฐฉ๋ฒ์ด์์. state
๋ฅผ ํตํด ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ํธ์์ฉ๊ณผ ๋ฐ์ดํฐ ๋ณํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐ์์ฑ๊ณผ ์ ๋์ฑ์ ๋ณด์ฅํด์.
state
์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์ ๋ฆฌ์กํธ ๊ฐ๋ฐ์ ์ค์ํ ๋ถ๋ถ์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋์ฑ ํ๋ถํ๊ณ ์ํธ์์ฉ์ด ํ๋ถํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ด์.
๐ ์ถ๊ฐ ์ ๋ณด
- ๋ฆฌ์กํธ์
state
์ ๋ํ ๋ ๊น์ ์ดํด๋ฅผ ์ํ์ ๋ค๋ฉด, ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์๋ณผ ์ ์์ด์.
'Front-end > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์๋ช ์ฃผ๊ธฐ (0) | 2024.10.20 |
---|---|
[React] JSX (0) | 2024.10.19 |
[React] useEffect (0) | 2024.04.04 |
[React] useRef (0) | 2024.01.31 |
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!