๋ฆฌ์กํธ๋ ์ ์ธ์ ํ๋ก๊ทธ๋๋ฐ(๋ฌด์์ ๊ฒฐ๊ณผ๋ก ์ป๊ณ ์ ํ๋์ง ์ค๋ช ํ๋ ๋ฐฉ์)์ ํ ์ ์๊ฒ ํ๋ค.
๋ฌด์์ ํ๋ฉด์ ํํํ ์ง JSX๋ฌธ๋ฒ์ผ๋ก ํํํ๋ฉด, JSX์ ๋ค์ด๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ๋ณํํ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋ง๋ ํ๋ฉด์ด ๊ฒฐ๊ณผ๋ก ํ์๋๋ค.
์ํ(state)
React ์ปดํฌ๋ํธ์ ์ํ๋ก, ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ๋ state๋ฅผ ์ฌ์ฉํ๋ค.
state๋ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐ์ดํฐ๊ณ , ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํ๋ฆ์ ์ฌ์ฉ๋๋ ๊ฐ๋ง state์ ํฌํจ๋์ด์ผ ํ๋ค.
์๋๋ state๋ฅผ ์ฌ์ฉํ์ง ์์ ์์๋ค.
function App() {
let counter = 0;
function increase() {
counter++;
console.log(counter);
}
function decrease() {
counter--;
console.log(counter);
}
return (
<>
<div>counter : {counter}</div>
<button onClick={increase}>+</button>
<button onClick={decrease}>-</button>
</>
);
}
๋ฒํผ์ ํด๋ฆญํ๋ฉด counter์ ๊ฐ์ด ์ฆ๊ฐํ๊ฑฐ๋ ๊ฐ์ํ๊ณ ์์์ ์ฝ์๋ก ํ์ธํด๋ณผ ์ ์์ง๋ง, ํ๋ฉด์ด ๋ณ๊ฒฝ๋์ง ์๊ณ ์๋ค.
๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋๋ง์ผ๋ก ๋ณํํ ๊ฐ์ ํ๋ฉด์ ๋ํ๋ด๊ฒ ํ๊ณ ์ถ๋ค๋ฉด state๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
useState()
React์์ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ Hook ์ค ํ๋๋ก, ๊ธฐ๋ณธ ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
const [state, setState] = useState(initialState);
// state : ํ์ฌ ์ํ ๊ฐ
// setState : ์ํ ๋ณ๊ฒฝ ํจ์
// useState() : [state, setState]ํํ๋ก ๋ฐํ
// initialState : ์ํ์ ์ด๊ธฐ๊ฐ
์ด๋ฅผ ์ฌ์ฉํด ์์ ์นด์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ด ํ๋ฉด์ ๋ ๋๋ง๋๋๋ก ์์ ํ ์ ์๋ค.
function App() {
const [counter, setCounter] = useState(0)
function increase() {
setCounter(counter+1);
}
function decrease() {
setCounter(counter-1);
}
return (
<>
<div>counter : {counter}</div>
<button onClick={increase}>+</button>
<button onClick={decrease}>-</button>
</>
);
}
๋๋ ์ต์ ์ํ๋ฅผ ๋ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํจ์๋ฅผ ์ ๋ฌํด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์๋ ์๋ค.
ํจ์์ ์ ๋ฌ ์ธ์๋ก ์ด์ ์ํ๊ฐ์ธ prev๋ฅผ ๋ฃ์ด์ฃผ๊ณ , return๊ฐ์ผ๋ก prev+1์ ํด์ฃผ๋ฉด ์ด๊ฒ ๋ค์ ์ํ๊ฐ์ด ๋๋ค.
์ฌ๋ฌ๋ฒ ์ฐ์ ์ ๋ฐ์ดํธํ ๋์๋ ์ด ๋ฐฉ๋ฒ์ด ๋ ์์ ํ๋ค.
function App() {
const [counter, setCounter] = useState(0)
function increase() {
setCounter((prev)=>prev+1);
}
function decrease() {
setCounter((prev)=>prev-1);
}
return (
<>
<div>counter : {counter}</div>
<button onClick={increase}>+</button>
<button onClick={decrease}>-</button>
</>
);
}
+ ํด๋์คํ ์ปดํฌ๋ํธ๋ก ์ํ๊ด๋ฆฌํ๊ธฐ
์์๋ ๋ณดํต ํจ์ํ์ ์ฐ๊ณ ์๊ธด ํ์ง๋ง ์์๋๋ ํธ์ด ์ข๋ค
class App extends Component {
state = { counter: 0 };
render() {
return (
<>
<div>counter {this.state.counter}</div>
<button
onClick={() => this.setState({ counter: this.state.counter + 1 })}>
+
</button>
<button
onClick={() => this.setState({ counter: this.state.counter - 1 })}>
-
</button>
</>
);
}
}
๋๋ ์๊น ํจ์์์ prev ํ๋ผ๋ฏธํฐ๋ฅผ ์ผ๋ ๊ฒ ์ฒ๋ผ ๋ฉ์๋ ๋ด์์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค.
class App extends Component {
// ์ํ๋ฅผ ๊ฐ์ฒด ํํ๋ก ์ง์ ์ ์, counter๋ ์ํ ๋ณ์
state = { counter: 0 };
// this์ ๋ฐ์ธ๋ฉ ๋ฌธ์ ๋ก ์ธํด ํด๋์ค ๋ด๋ถ์์ ์ผ๋ฐ์ ์ธ ํจ์ ์ ์ธ์ ๋ถ๊ฐ๋ฅํจ -> ํ์ดํ ํจ์๋ก this๋ฅผ ์๋ ๋ฐ์ธ๋ฉ
// ํ๋ผ๋ฏธํฐ์ธ prevState๋ก ์ด์ ์ํ ์์ ํ๊ฒ ๋ฐ์
increase = () => {
// this.setState()๋ก ์ํ ๋ณ๊ฒฝ
this.setState((prevState) => ({
counter: prevState.counter + 1,
}));
};
decrease = () => {
this.setState((prevState) => ({
counter: prevState.counter - 1,
}));
};
render() {
return (
<>
<div>counter {this.state.counter}</div>
<button onClick={this.increase}>+</button>
<button onClick={this.decrease}>-</button>
</>
);
}
}
'react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React / props, state ๋์ด์ฌ๋ฆฌ๊ธฐ (0) | 2025.04.06 |
---|---|
React / SPA vs MPA (0) | 2025.04.04 |
React / map, filter๋ก ๋ฐ๋ณต ๋ ๋๋งํ๊ธฐ (0) | 2025.04.03 |
React / JSX ๋ฌธ๋ฒ (0) | 2025.04.03 |
React / ์ปดํฌ๋ํธ (0) | 2025.04.03 |