[React] Clean up Effect

์งฑ์ซ‘ยท2021๋…„ 12์›” 7์ผ
0
post-thumbnail

๐Ÿ‘‰๐Ÿผ Clean up Effect

::Render -> Effect Callback -> Clean up!
Effect์ดํ›„ ์ผ์–ด๋‚˜๋Š” Cleanup Effect๋ฅผ ๋ณด๋ฉด, Cleanup Effect๋Š” ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด ์ด์ „์— ์ผ์œผํ‚จ Side Effect๋ฅผ ์ •๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

useEffect(() => {
	function handleScroll() {
		console.log(window.scrollY)
	}
	document.addEventListener("scroll", handleScroll)
}, [])

์œ„ ์ฝ”๋“œ๋Š” ํŽ˜์ด์ง€์— ์Šคํฌ๋กค ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค console์— ํ˜„์žฌ ์Šคํฌ๋กค์ด ์œ„์น˜ํ•œ y์ขŒํ‘œ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
Side Effect์ด๋ฏ€๋กœ useEffect ์•ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ํ•œ ๋ฒˆ๋งŒ ๋“ฑ๋กํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์˜์กด์„ฑ ๋ฐฐ์—ด์—๋Š” ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ค€๋‹ค.

๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ด ํŽ˜์ด์ง€๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ ์ด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋Š” ๋” ์ด์ƒ ํ•„์š”๊ฐ€ ์—†์–ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ผ์œผ์ผฐ๋˜ Effect๋ฅผ ์ •๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด ๋•Œ๋งˆ๋‹ค Cleanup Effect๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก useEffect ์•ˆ์— ํ•ด๋‹น ๋กœ์ง์„ ์ •๋ฆฌํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•ด๋‘๋ฉด ๋œ๋‹ค.

useEffect(() => {
	function handleScroll() {
		console.log(window.scrollY)
	}

	document.addEventListener("scroll", handleScroll)
	return () => {
		document.removeEventLisnter("scroll", handleScroll)
	}
}, [])

์œ„์˜ ์ฝ”๋“œ ์ค‘์— ๋ฆฌํ„ด๋ถ€๋ถ„์ด ๊ทธ์— ํ•ด๋‹นํ•œ๋‹ค.
์ฃผ์˜ํ•  ์ ์€ ๋‹จ์ˆœ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋Š” ์‹œ์ ์—๋งŒ Cleanup Effect๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค. ๋‹ค์Œ Effect๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ „์—, ์ด์ „ Effect์˜ ์˜ํ–ฅ์„ ์ •๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ปจ์…‰์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

const App = () => {
  const [count, setCount] = useState(0);

  console.log("render", count);

  useEffect(() => {
  
 /*   console.log("useEffect Callback", count);
    return () => {
			console.log("cleanUp", count);
		});
  }, [count]); */

  return <div onClick={() => setCount(count + 1)}>ํ•˜์ž‰</div>;
};

export default Foo;

์œ„์˜ ์ฝ”๋“œ์˜ ์ถœ๋ ฅ๊ฐ’์€

render, 0
useEffect Callback, 0

// ํด๋ฆญ

render, 1
cleanUp, 0
useEffect Callback, 1

profile
ไธๆ€•ๆ…ข, ๅชๆ€•็ซ™

0๊ฐœ์˜ ๋Œ“๊ธ€