React Hook - useState
๐ฌ State๋?
- ์ปดํฌ๋ํธ ๋ด์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ
- ์ฌ์ฉ์ UI์ ๋ฐ์ ํ๊ณ ๋ณ๊ฒฝ์ด ์ฆ๋ค๋ฉด ๋ณ์(let, const) ๋ง๊ณ useState ์ฌ์ฉ
๐ useState ์ฌ์ฉํ๊ธฐ
App.js
1. ์ฐ์ useState๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด import๋ฅผ ์์ผ์ค์ผํ๋ค.
import { useState } from 'react';
2. ๊ธฐ๋ณธ์ ์ธ useState ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
const [๋ณ์๋ช
, set๋ณ์๋ช
] = useState(์ด๊ธฐ๊ฐ);
์ฒซ๋ฒ์งธ๋ ๋ณ์๋ช , ๋๋ฒ์งธ๋ ๋ณ์๋ฅผ ๋ณ๊ฒฝ์ํฌ ํจ์๋ค
์ฝ๋๋ง ๋ณด๋ฉด ์ดํด๊ฐ ์๋๋ ์์๋ฅผ ๋ณด๋๋ก ํ์.
๐ฅ useState ์์1
์ฒซ ๋ฒ์งธ ์์๋ ๋ฒํผ ํด๋ฆญ์ 1์ฉ ์ฆ๊ฐํ๋ ๋ํ์ ์ธ Counter ์์์ด๋ค.
App.js
import { useState } from 'react';
function App() {
const [counter, setCounter] = useState(0);
console.log(`ํ์ฌ State ๊ฐ : ${counter}`)
const upgradeCounter = () => {
setCounter(counter + 1)
}
return (
<div>
<span>Number : {counter}</span>
<div>
<button onClick={upgradeCounter}>UPGRADE</button>
</div>
</div>
);
}
export default App;
์คํํ๋ฉด โจ
์ฝ๋์ค๋ช ๐จ
1. useState import
2. useState ์ด๊ธฐ๊ฐ ๋ง๋ค๊ธฐ
3. button์ onClick ์์ฑ์ ์ฃผ๊ณ upgradeCounter ํจ์ ํธ์ถ
4. setCounter(state ๋ณ๊ฒฝ ํจ์)๋ก counter + 1 ์ฆ๊ฐ
์ฃผ์โโ
๋ง์ฝ useState๊ฐ ์๋ ์ผ๋ฐ ๋ณ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
setCounter๋ก ์ฆ๊ฐํ์ง ์๊ณ ๊ทธ๋ฅ counter + 1 ํ๋ฉด ์ฌ๋๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค.
์ฆ UI๊ฐ ๋ณํ์ง ์์
์์์ฝ๋
function App() {
let counter = 0; // useState๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์ ์ ์ธ
const handleCounter = () => {
console.log(counter)
return counter = counter + 1; // counter 1์ฉ ์ฆ๊ฐ
}
return (
<div>
<span>Number : {counter}</span>
<div>
<button onClick={handleCounter}>UPGRADE</button>
</div>
</div>
);
}
export default App;
์คํํ๋ฉด
counter๋ผ๋ ๋ณ์๋ ์ฆ๊ฐํ๊ณ ์์ง๋ง, UI๋ ๋ณํ์ง ์๋๋ค.
Why โ
setState ํจ์๋ state๊ฐ ๋ณ๊ฒฝ๋ ๋ React์๊ฒ "ํ๋ฉด์ ๋ค์ ๋ ๋๋ง ํด๋ผ"๋ผ๋ ๋ช ๋ น์ ๋ด๋ฆฐ๋ค.
ํ๋ง๋๋ก UI์ ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์๋ ๋ณ์๋ State๋ก ๊ด๋ฆฌํ๋๊ฒ์ด ์ข๋ค.
(์๋ชป๋ ์์์๋ ์ฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์์ UI ์์ ๋ณ๊ฒฝ์ด ์๋ค)
๐ฅ useState ์์2
๋ ๋ฒ์งธ useState ์์๋ ์ฌ์ฉ์์ ์ด๋ฆ์ ์ ๋ ฅ๋ฐ์ li์ ์ถ๊ฐํ๋๊ฒ์ด๋ค.
App.js
import { useState } from 'react';
function App() {
const [names, setNames] = useState([]);
const [input, setInput] = useState('');
const handleInputChange = (e) => {
setInput(e.target.value);
};
const handleUpload = () => {
console.log(`์ด์ names state : ${names}`)
setNames((prev) => [...prev, input]);
};
return (
<div>
<input type="text" value={input}
onChange={handleInputChange}/>
<button onClick={handleUpload}>Upload</button>
<ul>
{names.map((name, idx) => {
return (
<li key={idx}>{name}</li>
);
})}
</ul>
</div>
);
}
export default App;
์คํํ๋ฉด โจ
'โข React > React Hook' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] useEffect ์ฌ์ฉ๋ฒ ๋ฐ ์์ - React Hook (0) | 2023.04.02 |
---|