๐ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
๐ useState() hook
- ํจ์ ์ปดํฌ๋ํธ๋ JSX๋ฅผ return ํ๋ ํจ์๋ค.
- ํจ์ ์ปดํฌ๋ํธ์์ ๋ด๋ถ์ ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ ์ผ์ด ํ์ํ๋ค.
- ์ด๋ฅผ ์ํด์ React์์๋ useState() hook์ ์ฌ์ฉํด์ผ ํ๋ค.
import React, { useState } from "react";
const [state, setSate] = useState();
- setState()๋ ์ปดํฌ๋ํธ์ re-rendering์ ๋ฐ์์์ผ ์
๋ฐ์ดํธ๋ฅผ ํด์ค๋ค.
๐ ๋ถ๋ณ์ฑ (immutable)
-
๋ถ๋ณ์ฑ์ ๋ณํ์ง ์๋ ์ฑ์ง์ ์ผ์ปซ๋๋ค.
-
ํ๋ก๊ทธ๋๋ฐ์์ ๋ถ๋ณ์ฑ์ ์งํจ๋ค๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ ์ง์ ์ ์ผ๋ก ๋ณ๊ฒฝํ์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
-
setState() ํจ์๋ฅผ ์คํํ๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด re-rendering์ด ๋ฐ์ํ๋ ๊ฒ์ ์๋๋ค.
- setState() ํจ์ ์ด์ ์ state ๊ฐ๊ณผ setState() ํจ์ ์ดํ์ state ๊ฐ์ ๋น๊ตํด์ ๋ง์ฝ ๊ฐ์ด ๋ค๋ฅด๋ฉด re-rendring์ด ์ผ์ด๋๋ค.
-
๋ถ๋ณ์ฑ์ ์งํค์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ๋ฉด React๋ state๊ฐ ๋ฐ๋์๋ค๊ณ ์ธ์งํ์ง ๋ชปํ๋ค.
- ์๋ํ๋ฉด React๋ ์ด์ state ๊ฐ๊ณผ ์ดํ state ๊ฐ์ ๋น๊ตํ ๋, ์์ ๋น๊ต(Shallow Compare)๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ๋น๊ต์์ ๋ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ๋ค๋ฉด ๊ฐ๋ค๊ณ ํํํ๋ค.
์์ ํ์
VS ์ฐธ์กฐ ํ์
- ์์ ํ์
์ ๋ถ๋ณ์ฑ์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ setState()๋ฅผ ํ ๋ ๋ฑํ ๊ณ ๋ คํ ์ ์ด ์์ง๋ง, ์ฐธ์กฐ ํ์
์ ๋ถ๋ณ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ setSate()๋ฅผ ํ ๋ ๋ถ๋ณ์ฑ์ ๊ฐ์ง๋๋ก ํธ์ถํด์ค์ผ ํ๋ค.
์ฐธ์กฐ ํ์
state ๋ค๋ฃจ๊ธฐ
const Counter = () => {
const operators = ["+", "-", "*"];
const [info, setInfo] = useState({
count: 0,
show: true,
operator: operators[0],
});
return (
<div>
<button onClick={() => setInfo({ ...info, show: !info.show })}>
Show and Hide
</button>
</div>
);
};
- Array๋ ์ฐธ์กฐ ํ์
์ด๋ค.
๐ props์ state
props
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์์ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ๋ ๊ฐ์ด๋ค.
- ๊ฐ์ ์์ ํน์ ์์ ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝํ ์ ์๋ค.
state
- ์ปดํฌ๋ํธ๊ฐ ์ค์ค๋ก ๊ด๋ฆฌํ๋ ์ํ ๊ฐ์ด๋ค.
- setState() ํจ์๋ฅผ ํตํด์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
props๋ฅผ ํตํด ๊ฐ์ ๋ด๋ ค ๋ฐ๊ฑฐ๋ ์์ ์ด ๊ด๋ฆฌํ๊ณ ์๋ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ ๋ ๋๋ง์ด ๋ฐ์ํ๋ค.
๐ State ์ฌํ
๋น๋๊ธฐ๋ก ์ด๋ฃจ์ด์ง๋ setState()
- setState() ํจ์๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
- ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํผํ ๋ ค๋ฉด setState() ์ธ์๋ฅผ ํจ์๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
const [number, setNumber] = useState(1);
const add = () => setNumber((number) => number + 1);
const subtract = () => setNumber((number) => number - 1);
const multiplyBy2 = () => setNumber((number) => number * 2);
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ
- React์ ๋ฐ์ดํฐ๋ ํญ์ ์๋๋ก ํ๋ฅธ๋ค.
- state๋ ํญ์ ํน์ ํ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ทธ state๋ก๋ถํฐ ํ์๋ UI ๋๋ ๋ฐ์ดํฐ๋ ์ค์ง ์์ ์ปดํฌ๋ํธ์๋ง ์ํฅ์ ๋ฏธ์น๋ค.
state ๋์ด์ฌ๋ฆฌ๊ธฐ
- ๋ชจ๋ ๋ฐ์ดํฐ ์์๋ฅผ ํ ๊ณณ์์๋ง ์ ์ด ๋๋ ํธ์งํ ์ ์๋๋ก ์ค๊ณํด์ผ ํ๋ค.
- ๋์ผํ ๋ฐ์ดํฐ์ ๋ํ ๋ณ๊ฒฝ์ฌํญ์ ์ฌ๋ฌ ์ปดํฌ๋ํธ์ ๋ฐ์ํด์ผ ํ ํ์๊ฐ ์ข
์ข
์๋๋ฐ, ์ด๋ด ๋๋ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก state๋ฅผ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด ์ข๋ค.
๐ ์๊ฐํ ์๊ฐ & ๋ ์ค๋ฅด๋ ์๊ฐ
- state ๋์ด์ฌ๋ฆฌ๊ธฐ ์ค์ต์ ํ๋ฉด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๊ณณ์์๋ง ์ ์ดํ ์ ์๋๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์ฌ์ค์ ๊นจ๋ฌ์๋ค. state๋ฅผ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ด ์์ง ๋ฏ์ค๊ณ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ํท๊ฐ๋ฆฌ์ง๋ง, ๋ฐ๋ณตํด์ ์ฐ์ตํ๋๋ก ํ์!
๐ ์ฐธ๊ณ ๋ํผ๋ฐ์ค