230628(์)
๐ ์ฑ์ฅ์ผ์ง 5.0
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐พ (4.0)ํ์ต ํค์๋์์ ์ต๋ํ ๊ฐ๋จํ ์ ๋ณด ์ ๊ณต, ๊ณ ๋ฏผ์์ ๋ด ๊ฒฝํ์ ์์ธํ ์ ์!
๐ฅ (5.0)ํ์ต ํค์๋๋ ํ์ค์ ํต์ฌ์ผ๋ก๋ง ์ ๋ฆฌ, ์ฑ๊ณต/์คํจ ์ผ์ง ์์ฑํ๊ธฐ! ์ด ๋, ์คํจ์ ๊ฒฝํ์ ์์ธํ ์ ๊ธฐ!
๐ ์ค๋์ ํ์ต ํค์๋
strict mode ์ผ๋๊ณ fetching data
strict mode๋ฅผ ๊ฐ๋จํ ์ค๋ช ํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ 2๋ฒ ๋ ๋๋งํ๊ฒ ํ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด ๋ ๋๋ง ์ค์ ๋ฐ์ํ๋ ์ฌ๋ฌ side effect๋ฅผ ์ฐพ์๋ผ ์ ์๋ค. ๋ค๋ง, ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ์ค์ ๋ ๋๋ง์ด 2๋ฒ ๋๊ธฐ์ ๋ค์ ๊ท์ฐฎ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์๋ฅผ ๋ค๋ฉด, data๋ฅผ ์์ฒญํด์ ๋ฐ์์จ ํ, ์ด๋ฅผ state๋ก ๊ด๋ฆฌํ ๋์ด๋ค. ํด๋น ์ปดํฌ๋ํธ๊ฐ 2๋ฒ ๋ ๋๋ง๋๋ฉด์ ์์ฒญ์ 2๋ฒ ๋ณด๋ด๊ฒ ๋๊ณ ์์ฐ์ค๋ฝ๊ฒ state๋ 2๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋๋ค. ํด์ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ด๋ฅผ ํด๊ฒฐํด๋ณด์๋ค. ignore๋ผ๋ flag ๋ณ์๋ฅผ ๋์ด์ ๋ ๋๋ง ์ค์๋ ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ก ํ์๋ค.
// ๊ทธ๋ฅ ์์ฒญ ๋ณด๋ด๋ ๊ฒฝ์ฐ
const [data, setData] = useState(null);
useEffect(() => {
fetch('https://api.example.com/items')
.then(res => res.json())
.then(data => setData(data));
}, []);
// ignore ๋ณ์๋ฅผ ํตํด ๋ ๋๋ง ์ค์๋ ์์ฒญ์ ๋ณด๋ด์ง ์๋๋ค.
const [data, setData] = useState(null);
let ignore = false;
useEffect(() => {
const startFetching = async () => {
const res = await fetch('https://api.example.com/items');
const data = await res.json();
if (!ignore) setData(data);
};
startFetching();
return () => {
ignore = true;
};
}, []);
๐ฉน๏ธ ์ค๋์ ์คํจ
- api ์ฐ๋ ์คํจ: ์ฐ๋ฆฌ ๋ฐฑ์๋ ์๋ฒ์ api๋ฅผ ์ฐ๋ํ๊ณ ์ถ์๋ฐ, ์๊ฐ๋ณด๋ค ์ฝ์ง ์๋ค. ๊ฐ์ด ๋ช ์ธ๋ฅผ ์์ฑํด๋ ๊ฐ๋ฐ ์์๋ ๋ง์ ๋ถ๋ถ๋ค์ด ์์ ๋๊ณ ๋ฐ๋ ์ ์๋ค๋ ๊ฒ์ ๋ฐฐ์ธ ์ ์์๋ค.
๐ ์ค๋์ ์ฑ๊ณต
- ์ํ ์์ธ ํ์ด์ง ๊ตฌํ!
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
์๊ณ โฆ ์ค๋์ ๊ฐ๋ฐ๋ ๊ฐ๋ฐ์ด์ง๋ง ํฌ๋กฑ๊ณผ ๋ฉด๋ด์ด ์๋ ๋ ์ด์๋ค. ์์ผ๋ก์ ๊ณํ๊ณผ ๊ณ ๋ฏผ ๊ทธ๋ฆฌ๊ณ ์ทจ์ ๊ณผ ๊ด๋ จ๋ ์ด์ผ๊ธฐ๋ฅผ ๋ง์ด ๋๋์๋ค. ํฌ๋กฑ ์ ๋์ ์๋์ด ๊ฐ๋ฐ์์ 1๋1๋ก ๊ฐ๋ณ๊ฒ ๋ฑ์ฐํ๋ฉด์ ๋ํ๋ฅผ ํ ์ ์๋ค๋โฆ ์์ผ์ค๋ ์ ๋ง ์์คํ ์๊ฐ์ด๋ผ๊ณ ๋๊ผ๋ค.