๋ฐ์ํ
๐ฏ ๋ฆฌ์กํธ State๋?
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>๋ฒํผ์ {count}๋ฒ ๋๋ ์ต๋๋ค.</p>
<button onClick={() => setCount(count + 1)}>ํด๋ฆญ</button>
</div>
);
}
- State๋ ์ปดํฌ๋ํธ ๋ด์์ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ๊ฐ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ๊ฐ๋ฐ์๊ฐ ์๋ํ ๋์์ ์ํด ๋ณํ ์๋ ์๊ณ ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ๋ผ ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ์๋ ์๋ค.
- State ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ์ฌ ๋ ๋๋ง์ด ํ์ํ ๊ฒฝ์ฐ์ React๊ฐ ์๋์ผ๋ก ๊ณ์ฐํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ ๋ ๋๋ง ํ๋ค.
๐ state ์ฌ์ฉํ๊ธฐ
import { useState } from "react";
const App = () => {
const [value, setValue] = useState(์ด๊ธฐ๊ฐ);
return ...
}
- State์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด์๋ ๋ฐ๋์ setState ํจ์๋ฅผ ์ด์ฉํ๋ค,
- state ๊ฐ์ ์์๋ก ๋ณ๊ฒฝํด์ ์ ๋๋ค.
๐ State ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ์ง ๋ง๊ธฐ!
import { useState } from 'react';
function Example() {
const [count, setCount] = useState(0);
return (
<div>
<p>๋ฒํผ์ {count}๋ฒ ๋๋ ์ต๋๋ค.</p>
<button onClick={() => {count = count + 1;}>ํด๋ฆญ</button> // ์ด๋ ๊ฒ ํ๋ฉด ์ ๋๋ค.
</div>
);
}
- State ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ๊ฒ ๋๋ฉด React๊ฐ Component๋ฅผ ๋ค์ ๋ ๋๋ง ํ ํ์ด๋ฐ์ ์์์ฐจ๋ฆฌ์ง ๋ชปํ๋ค.
- ๋ฐ๋์ setState ํจ์๋ฅผ ์ด์ฉํด ๊ฐ์ ๋ณ๊ฒฝ!!!!!
- setState ํจ์๋ฅผ ํธ์ถํ ๋ React์๊ฒ “๋ค์ ๋ ๋๋ง ํด์ฃผ์ธ์!!!”๋ผ๋ ๋ช ๋ น์ ๋ด๋ฆฐ๋ค.
๐ State๋ฅผ ๋ณ๊ฒฝํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ
// 1. setState ๋ด์ ๋ณ๊ฒฝํ ๊ฐ์ ๋ฃ๊ธฐ
const [count, setCount] = useState(0);
setCount(count + 1);
// 2. setState์ ํจ์๋ฅผ ๋ฃ๊ธฐ
const [count, setCount] = useState(0);
setCount((current) => {
return current + 1
})
- setState ํจ์์๋ ๋ณ๊ฒฝํ ๊ฐ์ ์ง์ ๋ฃ๋ ๋ฐฉ๋ฒ๊ณผ ํจ์๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- ํจ์๋ฅผ ๋ฃ๋ ๊ฒฝ์ฐ ํจ์๊ฐ ๋ฐํ(return)ํ๋ ๊ฐ์ผ๋ก State๊ฐ ๋ณ๊ฒฝ๋๋ค.
- ํ์ฌ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก State๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ํจ์๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅ
๐ Object, Array๋ฅผ ๊ฐ๋ State๋ฅผ ๋ง๋ค ๋ ์ฃผ์์ฌํญ
const [user, setUser] = useState({name: "๋ฏผ์", grade: 1})
setUser((current) => {
current.grade = 2; // ์ด๋ ๊ฒ ํ๋ฉด ์ ๋๋ค.
return current;
})
- Object๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ State๋ ๋ง๋ค ์ ์๋ค.
- ๊ทธ๋ฌ๋ ์์์ ๊ฒฝ์ฐ React๊ฐ State์ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ค!
- user object ์์ grade๊ฐ ๋ณ๊ฒฝ๋์์ง๋ง user ์์ฒด๋ ๋ณ๊ฒฝ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ์ ์ข์ ์
const [user, setUser] = useState({name: "๋ฏผ์", grade: 1})
setUser((current) => {
current.grade = 2;
return current;
})
- user์ grade๊ฐ ๋ณ๊ฒฝ๋์์ง๋ง user์ ๋ด์ฉ์ ๋ด๋ object ์์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๊ฒ์ ์๋๋ค.
๐ ์ฌ๋ฐ๋ฅธ ์
const [user, setUser] = useState({name: '๋ฏผ์', grade: 1 })
setUser((current) => {
const newUser = { ...current }
newUser.grade = 2
return newUser
})
- ๊ธฐ์กด user์ ๋ด์ฉ์ ์๋ก์ด object์ ๋ด๊ณ grade๋ฅผ ๋ณ๊ฒฝํ๋ค.
import React, { useState } from 'react';
function App() {
const [person, setPerson] = useState({
name: "๊น๋ฏผ์",
count: 0
});
return (
<div className="App">
<button onClick={() => {
setPerson((current) => {
const newPerson = { ...current };
newPerson.count = newPerson.count + 1;
return newPerson;
})
}}>ํด๋ฆญ</button>
<span>{person.name}๋์ด ๋ฒํผ์ {person.count}ํ ํด๋ฆญํ์์ต๋๋ค.</span>
</div>
);
}
export default App;
ref : https://lakelouise.tistory.com/260
[React] ๋ฆฌ์กํธ State๋?
๐ฏ ๋ฆฌ์กํธ State๋? import { useState } from 'react'; function Example() { const [count, setCount] = useState(0); return ( ๋ฒํผ์ {count}๋ฒ ๋๋ ์ต๋๋ค. setCount(count + 1)}>ํด๋ฆญ ); } State๋ ์ปดํฌ๋ํธ ๋ด์์ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ์ด
lakelouise.tistory.com
๋ฐ์ํ
'Frontend๐ฑ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React - useEffect๋? (4) | 2023.04.23 |
---|---|
[React] ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ Props (0) | 2023.04.20 |
[React] ๋ฆฌ์กํธ์์ ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ (0) | 2023.04.20 |
React-์ด๋ฒคํธ ํธ๋ค๋ง(onChange, onClick, input ์ฌ๋ฌ ๊ฐ, onKeyPress) (0) | 2023.04.20 |
[๋ฆฌ์กํธ] Router ํ์ด์ง ์ด๋์ ๋ํด์ ๋ค์ด๋ณธ ์ ์๋..? (0) | 2023.04.18 |