๊ด€๋ฆฌ ๋ฉ”๋‰ด

Bin's Blog

[์œ ๋ฐ๋ฏธx์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ] 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ ์บ ํ”„ 19์ผ์ฐจ - ๋ฆฌ์•กํŠธ(2) ๋ณธ๋ฌธ

ํ•™์Šต์ผ์ง€

[์œ ๋ฐ๋ฏธx์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ] 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ ์บ ํ”„ 19์ผ์ฐจ - ๋ฆฌ์•กํŠธ(2)

hotIce 2023. 6. 23. 20:36
728x90

 

๐Ÿค” ๋ฆฌ์•กํŠธ ํ›…(Hook)์ด๋ž€?

๐Ÿ‘‰ ๋ฆฌ์•กํŠธ ํ›…์€ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. 

๐Ÿ‘‰ ์ด์ „์—๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋‹ค.

 

๐Ÿค” ์™œ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ํ•„์š”ํ• ๊นŒ?

๐Ÿ‘‰ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŽ˜์ด์ง€์— ์ฒ˜์Œ ๋ Œ๋”๋ง๋  ๋•Œ, ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋  ๋•Œ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํŽ˜์ด์ง€์—์„œ ์ œ๊ฑฐ๋  ๋•Œ์— ์‹คํ–‰๋œ๋‹ค.

๐Ÿ‘‰ ๋‹ค์–‘ํ•œ ํ™œ์šฉ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค.

1๏ธโƒฃ ๋ฉ”์„œ๋“œ์—์„œ API๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

2๏ธโƒฃ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ, ํƒ€์ด๋จธ, ๋“ฑ๋ก๋œ ๊ตฌ๋™ ๋“ฑ์„ ์„ค์ •ํ•œ ํ›„์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ ์ด๋“ค์„ ์ •๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•œ๋‹ค.

3๏ธโƒฃ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ๋‚˜ ์†์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

1๏ธโƒฃ useState

๐Ÿ‘‰ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฐ’์„ ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ์ƒํƒœ ์œ ์ง€ ๊ฐ’๊ณผ ๊ทธ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

๐Ÿ‘‰ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๐Ÿ‘‰ useState์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ

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

2๏ธโƒฃ useEffect

๐Ÿ‘‰ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํŠน์ • ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” hook

๐Ÿ‘‰ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ์‹คํ–‰ํ•  ํ•จ์ˆ˜, ๋‘ ๋ฒˆ์งธ ์ธ์ž๋Š” ์˜์กด์„ฑ ๋ฐฐ์—ด์„ ๋ฐ›๋Š”๋‹ค. 

 

1๏ธโƒฃ ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ์—†๋Š” ๊ฒฝ์šฐ

๐Ÿ‘‰ ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

import React from "react";

React.useEffect(() => {
  dispatch(getActions.getFundingAC(page));

});

2๏ธโƒฃ ์˜์กด์„ฑ ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์„ ๊ฒฝ์šฐ

๐Ÿ‘‰ ์ฒซ ๋ Œ๋”๋ง ์‹œ์—๋งŒ ํ•จ์ˆ˜(dispatch)๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

import React from "react";

React.useEffect(() => {
  dispatch(getActions.getFundingAC(page));

}, []);

3๏ธโƒฃ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ

๐Ÿ‘‰ ํ•ด๋‹น๊ฐ’(page) ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ํ•จ์ˆ˜(dispatch)๊ฐ€ ์‹คํ–‰

import React from "react";

const [page, setPage] = React.useState(1)

React.useEffect(() => {
  dispatch(getActions.getFundingAC(page));

}, [page]);

 

4๏ธโƒฃ ์‹ค์Šต ์˜ˆ์‹œ

  useEffect(() => {
    const timer = setInterval(() => {
      setCount((count) => count + 1)
    }, 1000);
    return () => {
      clearInterval(timer);
      console.log("clearup function works")
    };
  }, [])

๐Ÿ‘‰ clearInterval() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์— timer๊ฐ€ 1์ดˆ์— 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋ฉด์— clearInterval()ํ•จ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด timer๊ฐ€ ํ•œ ๋ฒˆ์”ฉ 2์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค. 

๐Ÿ‘‰ clearInterval ํ•จ์ˆ˜๋Š” Timer ๋ฐ˜๋ณต ํ˜ธ์ถœ์„ ๋ง‰์•„์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐ˜๋ณตํ˜ธ์ถœ์„ ๋ง‰์•„์ฃผ๋‹ˆ๊นŒ ์ด์ค‘์œผ๋กœ ํƒ€์ด๋จธ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๊ณ  ๋”ฑ ํ•œ ๊ฐœ์˜ Timer๊ฐ€ ์ž‘๋™ํ•œ๋‹ค. 

๐Ÿ‘‰ useState()ํ•จ์ˆ˜์—์„œ ๊ฐ’์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ๋ฆฌ๋ Œ๋”๋ง ๋˜๋ฉด์„œ => useEffect()๊ฐ€ ์‹คํ–‰๋˜๊ณ  => ๊ทธ๋ฆฌ๊ณ  clearInterval()ํ•จ์ˆ˜ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ๋งŒ ๋™์ž‘ํ•˜๊ณ  ์ข…๋ฃŒ๋œ๋‹ค.  

 

 

 

 

 

 ๋ณธ ํ›„๊ธฐ๋Š” ์œ ๋ฐ๋ฏธ-์Šค๋‚˜์ดํผํŒฉํ† ๋ฆฌ 10์ฃผ ์™„์„ฑ ํ”„๋กœ์ ํŠธ์บ ํ”„ ํ•™์Šต ์ผ์ง€ ํ›„๊ธฐ๋กœ ์ž‘์„ฑ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

728x90