state, props ๋ฅผ ํ์ฉํด ์ํ๋ UI ํ๋ฉด์ ๋ ๋๋งํ ์ ์์ง๋ง
์ํ๋ ํ๋ฉด์ ์์ ํ ๊ตฌํํ๊ธฐ์ ๋ถ์กฑํจ์ด ์๋ค.
๐useEffect ๊ฐ ํ์ํ ์ด์ ๋ ?
ํ๋ฉด์ ๋ณด์ผ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ๋ฐ์์ค๊ธฐ๋ ํด์ผ ํ๊ณ ,
state๊ฐ ๋ฐ๋ ๋๋ง๋ค ํจ์๋ฅผ ์คํ์ํค๊ฑฐ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๊ณ ํด์ ํ๋ ๋ฑ ๋์์ ํด์ผ๋๊ธฐ ๋๋ฌธ์ด๋ค.
useEffect๋ฅผ ์ฐ๋ฉด ์ํ๋ ํ์ด๋ฐ์ Side Effect๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
๐๊ทธ๋ผ Side Effect๋ ๋ญ๊น?
๋ถ์์ฉ์ด๋ผ๋ ๋ป์ ๊ฐ๊ณ ์์ง๋ง ์ข ๋ ํ์ด ๋งํ๋ฉด ๋ถ์์ ์ธ ํจ๊ณผ๋ผ๊ณ ํ ์ ์๋ค.
์ฝ๋์์ ์ฃผ์ํ ํจ๊ณผ์ ๋ฐ๋ผ์ ๋ฐ์ํ๋ ์ถ๊ฐ์ ์ธ ํจ๊ณผ๋ผ๊ณ ํ๋ค.
ํจ์์์ ์์ฃผ ์ฌ์ฉ๋๋๋ฐ Input ์ ๋ฐ์ Output ์ ์ฐ์ถํ๋ ๊ฒ ์ด์ธ์ ๋ชจ๋ ๋์์ ๋งํ๋ค.
์์ ํจ์ : side effect ๊ฐ ์๋ ํจ์
์ธํ์ ๋ฐ์ ์์ํ์ ๋ด๋ ํ์ ์ธ์ ๋ค๋ฅธ ํ์ ์์
const sum = (x) => {
return x + 1;
};
side Effect ๊ฐ ์๋ ํจ์ : ํจ์ ๋ด๋ถ ๊ฐ์ด ์๋ ์ธ๋ถ ๊ฐ๋ ์ฝ์ด์ฌ ๋
const num = 1;
const sum = (x) => {
return x + num;
};
์ธ๋ถ์ ๋ณ์๋ฟ๋ง์ด ์๋๋ผ
DOM์ ์กฐ์ํ๊ณ , consoleํจ๋๋ก ๊ฐ์ ์ถ๋ ฅํ๋ ๊ฒ๋
ํจ์ ์ธ๋ถ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ side effect๊ฐ ์๋ ํจ์๊ฐ ๋๋ค.
const printNum = (x) => {
console.log(x);
};
const changeTitle = (newTitle) => {
const title = document.getElementById("title");
title.innerText = newTitle;
side effect๋ ํจ์ ๋์์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ค์ ์ ์ง๋ณด์๋ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ๊ธฐํผํด์ผ ํ๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด๋๊ณ ์ ์ฅํด๋ ๊ฐ์ ์ฝ์ด์ค๋ ํ์๋ ํ์ํ๊ณ
์ด๋ค ๊ฐ๋ ์ธ๋ถ๋ก ์ถ๋ ฅํ์ง ์๋ ์ํฉ์ ๋ฐฐ์ ํ ์ ์๋ค.
โ side effect๋ ํผํ ์ ์๊ณ useEffect๋ก ์ปจํธ๋กคํ ์ ์๋๋ก ๋ง๋ค์ด ์ ์ง๋ณด์์ ์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํด์ผ ํ๋ค.
๐React์์ Side Effect๋?
๋ฆฌ์ํธ์์ ๋ ๋๋ง์ state, props ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก UI๋ฅผ ๊ทธ๋ ค๋ด๋ ํ์๋ก UI๋ ํจ์ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด ๊ตฌ์ฑํ ์ ์๋ค.
ํจ์ ์ปดํฌ๋ํธ๋ state, props ๋ฅผ ํตํด JSX๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ด ๋ณธ์ง์ ์ธ ์ญํ ์ด์ง๋ง, ๊ทธ ์ธ์ side effect๊ฐ ๋ฐ์ํ๋ค.
โ side effect๊ฐ ์๋ ๊ฒฝ์ฐ
1. Data Fetching
ํ๋ก ํธ์๋๊ฐ ๋ฐฑ์๋ API๋ฅผ ํตํด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ํ์๋ ํ์์ ์ธ ํ์์ด๋ค.
๊ทผ๋ฐ ์ด๊ฒ๋ ์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ side effect ๋ค.
*FE์์ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ side effect ๋ค.
2. DOM์ ์ ๊ทผ ๋ฐ ์กฐ์
react๊ฐ DOM ์กฐ์์ ์ฒ๋ฆฌํด์ฃผ์ด ๊ฐ๋ฐ์๊ฐ ์ง์ DOM์ ์ ๊ทผํ ์ผ์ด ๋ง์ง ์์ง๋ง, ํน์ ์ํฉ์์๋ ์ง์ DOM์ ์กฐ์ํ ์๋ ์๋ค.
3. ๊ตฌ๋
(Subscribe)
ํ๋ก๊ทธ๋๋ฐ์์ ๊ตฌ๋
์ ์ด๋ค ๊ฒ์ ๊ณ์ ๊ด์ฐฐํ๋ค๊ฐ ๋ณํ๊ฐ ๋ฐ์ํ๋ฉด ํน์ ํ ์ก์
์ ์ทจํ๋ ๊ฒ์ด๋ค.
๋ณดํธ์ ์ผ๋ก, ์๊ฐ์ ๊ตฌ๋
ํ๋ค.
-setTimeout : ์๊ฐ์ ๊ตฌ๋
ํ๋ฉด์ ํน์ ํ ์๊ฐ์ด ์ง๋๋ฉด ๋์์ ์ํํด์ค๋ค.
-setInterval : ์ผ์ ์๊ฐ๋ง๋ค ํน์ ๋์์ ์ํํด์ค๋ค.
์ธ๋ถ์ ๊ฐ์ ๋ณํ๋ฅผ ๊ด์ฐฐํ๊ณ ๋ง์ถฐ ๋์์ ํ๊ธฐ์ side effect
'๐Code > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React | REST API๋ฅผ ์ด์ฉํ Kakao ์์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ (1) | 2023.05.14 |
---|---|
React | useEffect() ๋ฅผ ์จ๋ณด์ (0) | 2023.03.28 |
React | ๋๊ธ ์จ๊ธฐ๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ (0) | 2023.03.26 |
React | React์ JSX (0) | 2023.03.26 |
React | React ์ฌ์ฉํ๊ธฐ (0) | 2023.03.26 |