๐ช ๋จผ์ ์์์ผํ ๊ฐ๋
์ปดํฌ๋ํธ ์ธ๋ง์ดํธ๋ ?
์ปดํฌ๋ํธ ์ธ๋ง์ดํธ(Unmount)๋ React ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๊ฑฐ๋ ๋ ์ด์ ํ์ ์์ ๋ ๋ฐ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๋ ๊ฒฝ์ฐ ๐ญ
- ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์ด๋ํ ๋
- ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ํตํด ์ปดํฌ๋ํธ๊ฐ ์จ๊ฒจ์ง๊ฑฐ๋ ์ ๊ฑฐ๋ ๋
- ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋ ๋
์ด๋ฒคํธ ๋ฆฌ์ค๋์ ํด๋ฆฐ์
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์ ํน์ ์ด๋ฒคํธ(์: ํด๋ฆญ, ๋ฆฌ์ฌ์ด์ฆ, ์ ๋ ฅ ๋ฑ)๊ฐ ๋ฐ์ํ ๋ ํธ์ถ๋๋ ํจ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, window.addEventListener('resize', handleResize)๋ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ๋๋ง๋ค handleResize ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
์ ํด๋ฆฐ์ ์ด ํ์ํ๊ฐ?
์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋์์์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๊ณ์ ๋จ์์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค:
- ๋ถํ์ํ ํจ์ ํธ์ถ: ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋์์ง๋ง ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ๊ณ์ ๋จ์ ์์ผ๋ฉด, ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ ํ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ๊ด๋ จ๋ ํจ์๋ฅผ ํธ์ถํ ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋นํจ์จ์ ์ธ ํจ์ ํธ์ถ์ด ๋ฐ์ํ๊ณ , ์ด๋ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์: ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋ ํ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋จ์ ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ผ๋ฏ๋ก, ์ฅ๊ธฐ์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
์์ ) ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋
import React, { useEffect } from 'react';
const ExampleComponent = () => {
useEffect(() => {
const handleClick = () => { console.log('Button clicked');
}; // ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ๋ฑ๋ก window.addEventListener('click', handleClick); // ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๋ฉด ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ๊ฑฐ return () => { window.removeEventListener('click', handleClick); }; }, []); return ( <div> <p>Click anywhere on the window to see the log.</p> </div> ); };
export default ExampleComponent;
์ค๋ช
- ์ปดํฌ๋ํธ ๋ง์ดํธ: ExampleComponent๊ฐ ๋ ๋๋ง๋๋ฉด, useEffect๊ฐ ์คํ๋๊ณ window.addEventListener('click', handleClick)๊ฐ ํธ์ถ๋ฉ๋๋ค. ์ด์ ๋ธ๋ผ์ฐ์ ์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค handleClick ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค.
- ์ปดํฌ๋ํธ ์ธ๋ง์ดํธ: ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๊ฑฐ๋ ExampleComponent๊ฐ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์ํด ์ ๊ฑฐ๋๋ฉด, useEffect์ ํด๋ฆฐ์ ํจ์๊ฐ ํธ์ถ๋ฉ๋๋ค. window.removeEventListener('click', handleClick)๊ฐ ์คํ๋์ด ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
- ๋ฌธ์ ๋ฐ์: ๋ง์ฝ ํด๋ฆฐ์
ํจ์๊ฐ ์์๋ค๋ฉด, ExampleComponent๊ฐ ์ธ๋ง์ดํธ๋ ํ์๋ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๊ณ์ ๊ฐ์ง๋๊ณ handleClick ํจ์๊ฐ ํธ์ถ๋๋ฉฐ, ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ ํ handleClick ํจ์์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์งํฉ๋๋ค.
- ๋ถํ์ํ ๋ก๊ทธ ์ถ๋ ฅ: ํ์ด์ง๊ฐ ์ฌ๋ผ์ก์์๋ ๋ถ๊ตฌํ๊ณ ์ฝ์์ ๋ก๊ทธ๊ฐ ๊ณ์ ์ถ๋ ฅ๋ฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋์: ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๊ด๋ จ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ปดํฌ๋ํธ๊ฐ ์ธ๋ง์ดํธ๋๊ธฐ ์ ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค
์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ๋์์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค ! ๐
'๐ฉ๐ปโ๐ป ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React ์๊ณ ๊ฐ ๊ฐ๋ ] - state์ props์ ์ฐจ์ด๋ฅผ ์์๋ณด์ (0) | 2025.01.09 |
---|---|
[React ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ] - Jotai, Context, Zustand ๋น๊ต (1) | 2024.10.16 |
[React] - React์์ ์คํ์ผ๋ง์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ (0) | 2024.08.22 |
[React] - React 18์ ์๋ก์ด API ('createRoot') (0) | 2024.07.30 |