useEffect

๊น€๋‚จ๊ฒฝยท2022๋…„ 12์›” 6์ผ

react

๋ชฉ๋ก ๋ณด๊ธฐ
9/37

์˜๋ฏธ

๐Ÿ’ก 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์˜ ๊ทœ์น™

profile
๊ธฐ๋ณธ์— ์ถฉ์‹คํ•˜๋ฉฐ ์•ž์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š”

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