1. useEffect ํจ์๋?
React ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋ ๋๋ง๋ค ํน์ ์์ ์ ์คํํ ์ ์๋๋ก ํ๋ Hook
2. useEffect ์ฌ์ฉ๋ฒ
๐น ์ฒซ ๋ฒ์งธ
useEffect(() => {});
- useEffect์ ๊ฐ์ฅ ๊ธฐ๋ณธ ํํ์ด๋, ๊ฑฐ์ ์ฌ์ฉํ์ง๋ ์๋๋ค.
- Dependency๊ฐ ์๊ธฐ ๋๋ฌธ์, ์์ ์์๊ฐ ํ๋๋ผ๋ ๋ณํํ ๋๋ง๋ค useEffect๊ฐ ๋ฐ๋๋์ด ๋ถํ์ํ ์คํ์ด ๋ง์์ง๊ธฐ ๋๋ฌธ์ด๋ค.
๐น ๋ ๋ฒ์งธ
useEffect(() => {}, []);
- useEffect์์ ์ค์ ํ ํจ์๊ฐ ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์ ๊ฐ์ฅ ์ฒ์ ๋ ๋๋ง ๋ ๋๋ง ์คํํ๋ค.
๐น ์ธ ๋ฒ์งธ
useEffect(() => {}, [name]);
- useEffect๋ฅผ ํน์ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋ ๋ ํธ์ถํ๋ค.
- useEffect๋ฅผ ๋ ๋๋ง ํ ํ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด ์ ๋ณ์์ ๊ฐ์ด ๋ณํ ๋๋ง๋ค ์คํํ๋ค.
3. useEffect ์ฌ์ฉ ์์
๐ ํด๋ฆญํ ํ์์ ๊ฐ์ alert ์ฐฝ์ ๋์์ฃผ๋ ์์
const myButton = () => {
const [count, setCount] = useState(0);
useEffect(() => {
alert(count);
});
const showClickNum = () => {
setCount(count + 1);
};
return (
<button onClick = {showClickNum}>
Click Me
</button>
);
};
export default myButton;
- ์ฌ์ฉ์๊ฐ ํด๋ฆญํ๋ฉด showClickNum ํจ์๋ฅผ ํธ์ถํ๋๋ฐ, ์ด ํจ์๋ count ๊ฐ์ 1์ ๋ํ๋ค.
- ์ด ๊ฒฝ์ฐ์ ์ํ๊ฐ์ด ์ ๋ฐ์ดํธ ๋๋ฏ๋ก alert๋ฅผ ์ถ๋ ฅํ๋ useEffect()๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
๐ ํน์ ๋ณ์ ๊ฐ์๋ง ๋์ํ๋ useEffect()
useEffect(() => {
alert('Updated!');
});
useEffect(() => {
alert(count);
}, [count]);
- ์ฒซ ๋ฒ์งธ ์ฝ๋: ์ปดํฌ๋ํธ๊ฐ ๋ณ๊ฒฝ, ์ ๋ฐ์ดํธ ๋ ๊ฒฝ์ฐ ๋์ํ๋ค.
- ๋ ๋ฒ์งธ ์ฝ๋: count ๊ฐ์ด ์ ๋ฐ์ดํธ ๋ ๊ฒฝ์ฐ์๋ง ํด๋น ์ฝ๋ฐฑ์ ์คํํ๋ค.
๐ useEffect()๋ฅผ props์๋ ์ฌ์ฉํ๊ธฐ
useEffect(() => {
alert('Props Updated');
}, [props.siteName]);
- useEffect์ ๋ ๋ฒ์งธ ์ธ์ ๊ฐ์ [] ๋ด๋ถ์ state ๋ฟ๋ง ์๋๋ผ, ์ ๋ฌ๋ฐ์ props ๊ฐ ๋ํ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ฆ, ๋ถ๋ชจ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ props์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ์ฝ๋ ์ญ์ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
- ์์ ์ฝ๋๋ ๋ถ๋ชจ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ props.siteName ๊ฐ์ด ๋ณํ๋ ๊ฒฝ์ฐ์ด๋ค.
[ ์ฐธ๊ณ ]
- https://velog.io/@velopert/react-hooks
- https://ko-de-dev-green.tistory.com/18
- https://webisfree.com/2020-11-30/react-%ED%95%A8%EC%88%98%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-useeffect-%ED%9B%85-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%98%88%EC%A0%9C
'web > react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] props (0) | 2021.09.15 |
---|---|
[React] ๋ฆฌ์กํธ ์์ํ๊ธฐ (0) | 2021.09.13 |
[React] ์ปดํฌ๋ํธ์ state (0) | 2021.09.13 |