๐ก React์ ํจ์ ์ปดํฌ๋ํธ๋ props๊ฐ ์
๋ ฅ, JSX Element๊ฐ ์ถ๋ ฅ์ผ๋ก ์์ ํจ์๋ก ์๋ํ๋๋ฐ, AJAX ๋ฑ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ Side Effect๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ Effect Hook
๐ Pure Function vs Side Effect
Side Effect ํจ์ ๋ด์ ๊ตฌํ์ด ํจ์ ์ธ๋ถ์ ์ํฅ์ ๋ผ์น๋ ๊ฒฝ์ฐ
์) fetch๋ฅผ ์ฌ์ฉํด์ API์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ด๋ฒคํธ๋ก DOM ์กฐ์ํ ๊ฒฝ์ฐ
์์ ํจ์ ํจ์์ ์
๋ ฅ๋ง์ด ํจ์์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ํจ์
๐ ์ธ์ ?
-์ปดํฌ๋ํธ ์์ฑ ํ ์ฒ์ ํ๋ฉด์ ๋ ๋๋ง๋ ๋(ํ์)
-์ปดํฌ๋ํธ์ ์๋ก์ด props๊ฐ ์ ๋ฌ๋๋ฉฐ ๋ ๋๋ง
-์ปดํฌ๋ํธ์ state๊ฐ ๋ฐ๋๋ฉฐ ๋ ๋๋ง
๐ ์ฃผ์
์ต์์์์๋ง ํธ์ถ
๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ํน์ ์ค์ฒฉ๋ ํจ์ ๋ด์์ Hook์ ํธ์ถํ๋ฉด ์๋จ
(์ฌ๋ฌ๋ฒ ํธ์ถํด๋ ํญ์ ๋์ผํ ์์๋ก ํธ์ถํ๊ธฐ ์ํด)
React ํจ์ ๋ด์์๋ง ํธ์ถ
์ผ๋ฐ JSํจ์ ๋ด์์ ํธ์ถํ๋ฉด ์๋จ
๐ ์กฐ๊ฑด๋ถ effect ๋ฐ์
์ฒซ๋ฒ์งธ ์ธ์๋ ํจ์(์ฌ์ผ ํจ), ๋๋ฒ์งธ ์ธ์๋ ์ข
์์ฑ ๋ฐฐ์ด
๋๋ฒ์งธ ์ธ์
boolean์ด ์๋
์ด๋ค ๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋๋ฅผ ์๋ฏธ
๋ฐฐ์ด์๋ ์ด๋ค ๊ฐ์ ๋ชฉ๋ก์ด ๊ธฐ์
๋จ
useEffect(() => {
fetch(`http://serverAddress.com/item?q={filter}`)
.then(response => response.json())
.then(data => {
setItem(data);
});
}, []);
โ
์ปดํฌ๋ํธ๊ฐ ์ฒ์ ์์ฑ๋ ๋๋ง ์คํ
โ
HTTP ์์ฒญ ๋น๋๋ฅผ ์ค์ฌ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ์ฒ๋ฆฌํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ถ๋ด ์ฆ๊ฐ
useEffect(() => {
fetch(`http://serverAddress.com/item?q={filter}`)
.then(response => response.json())
.then(data => {
setItem(data);
});
}, [filter]);
โ
filter๊ฐ ๋ฐ๋ ๋๋ง๋ค ์คํ
โ
ํด๋ผ์ด์ธํธ๊ฐ ํํฐ๋ง ๊ตฌํ ์๊ฐ ํ์์์ด ์ปดํฌ๋ํธ ์ธ๋ถ์์ ์ฒ๋ฆฌํ์ฌ ์๋ฒ ๋ถ๋ด ์ฆ๊ฐ
์ฝ๋์คํ
์ด์ธ ๊ต๊ณผ์
Hook์ ๊ท์น