๐Ÿ“š Study/JS, JQuery

[React JS][๋‹ˆ์ฝ”์ฝ”๋”ฉ] Effects

kkh1902 2022. 2. 17. 17:21
728x90
๋ฐ˜์‘ํ˜•

6.0 Introduction

  • React๋กœ ์ž‘์—…ํ•  ๋•Œ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑธ ๊ณต๋ถ€ํ•  ๊ฑฐ๋‹ค.
  • ๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜ ์ •์˜ ํ•  ๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ๊ณ„์† state๋ฅผ changeํ•ด ์™”๊ณ , ๊ทธ๋Ÿด ๋•Œ ๋งˆ๋‹ค ์ด ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์— ์ต์ˆ™ ํ–ˆ๋‹ค.
  • ๋ฌธ์ œ
    • component ์ฒ˜์Œ render๋  ๋•Œ๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธธ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ง€๊ธˆ์€ ๋‚ด state๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ด console.log๊ฐ€ ์‹คํ–‰๋  ๊ฑฐ๋‹ค.
    • ๊ฐ€๋”์€ ์ฒซ๋ฒˆ์งธ๋กœ renderํ•  ๋•Œ๋งŒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์ฒซ๋ฒˆ์งธ render์—๋งŒ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ , ๋‹ค๋ฅธ state๋ณ€ํ™”์—๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํŠน์ • ์ฝ”๋“œ๋“ค์ด ์ฒซ๋ฒˆ์งธ componet render์—์„œ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ํ•˜๋Š”์ง€ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค.
    • ์ฒ˜์Œ ํ•œ๋ฒˆ๋งŒ
    • ๋‚˜์ค‘์— state๊ฐ€ ๋ณ€ํ™”ํ•ด๋„, ๊ทธ ์ฝ”๋“œ๋Š” ๋‹ค์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋งˆ์ง€๋ง‰ ์ •๋ฆฌ
    • ๋‚ด๊ฐ€ state๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๋ชจ๋“  code๋“ค์€ ๋‹ค์‹œ ์‹คํ–‰๋œ๋‹ค ํ•ญ์ƒ
    • ๊ฐ€๋”์€ ๋„ˆ์˜ componet ๋‚ด๋ถ€์˜ ๋ช‡๋ช‡ ์ฝ”๋“œ๋Š” ์ฒ˜์Œ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋˜๊ณ  ๋‹ค์‹œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ  ์‹ถ์„ ๊ฑฐ๋‹ค.(๋‹ค์Œ ๊ฐ•์˜)

6.1 useEffect

  • ๊ฐ€๋”์€ ์šฐ๋ฆฌ๊ฐ€ ํŠน์ • ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ์ œํ•œํ•˜๊ณ  ์‹ถ๋‹ค.
  • component๊ฐ€ ๋งจ ์ฒ˜์Œ render๋  ๋•Œ
  • ์ฝ”๋“œ๋ฅผ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ , ๋‹ค์‹œ๋Š” ์‹คํ–‰ํ•˜์ง€ ์•Š์„ ๊ฑฐ๋‹ค.
  • React JS๊ฐ€ ๊ฐœ๋ฐœํ•œ ๊ฒƒ useEffect๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” function์ด ์žˆ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ argument๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๊ฐ€ ๋  ๊ฑฐ๋‹ค.
    • ๋‘ ๋ฒˆ์งธ argument๋Š” ๋งˆ๋ฒ•๊ฐ™์€ ์นœ๊ตฌ์ด๋‹ค.
  • useEffect์—๋Š” component๊ฐ€ ์ฒ˜์Œ renderํ•  ๋•Œ ์‹คํ–‰๋˜๊ณ  ๋‹ค์‹œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์€ funtion์„ ๋„ฃ์–ด์ค„ ๊ฑฐ๋‹ค.
    • useEffect์—๊ฒŒ ์ฒซ๋ฒˆ์งธ argument์— ํ•จ์ˆ˜๋ฅผ ๋„ฃ๊ณ  ๋‘ ๋ฒˆ์งธ argument๋กœ์จ ๋นˆ array๋ฅผ ํ•˜๋‚˜ ์ค„ ๊ฑฐ๋‹ค.
    • useEffect function์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ์šฐ๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋ณดํ˜ธํ•ด์ค€๋‹ค.
    • ์šฐ๋ฆฌ๋Š”react JS๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์–ธ์ œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์•ˆํ• ์ง€ ๊ฒฐ์ •ํ•  tool์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๊ฑธ ์•ˆ๋‹ค.

6.2 Deps

  • useeffect๊ฐ€ ์žˆ์œผ๋‹ˆ๊นŒ API๋ฅผ ํ•œ๋ฒˆ ๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌธ์ œ ๋ฐœ์ƒ
    • ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ๋”๋‹ˆ marvel์ด ๊ณ„์† ๊ฒ€์ƒ‰๋จ
    • ๋‚˜๋Š” search Keyword์— ๋ณ€ํ™”๊ฐ€ ์žˆ์„ ๋•Œ ๋งŒ marvel ์˜ํ™”๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์€ ๊ฑฐ๋‹ค.
    • counter๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ์—๋„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š๋‹ค.
    • ์ด๊ฒŒ ๋ฐ˜๋ณต ๋˜๋Š” ์ด์œ ๋Š” ์šฐ๋ฆฌ๊ฐ€ state๋ฅผ ๋ณ€ํ™”์‹œํ‚ฌ ๋•Œ๋งˆ๋‹ค ๋‹ค ์‹คํ–‰ ๋˜๊ธฐ ๋•Œ๋ฌธ
  • ๋‚ด ์ฝ”๋“œ์˜ ํŠน์ •ํ•œ ๋ถ€๋ถ„๋งŒ์ด ๋ณ€ํ™”ํ–ˆ์„ ๋•Œ ์›ํ•˜๋Š” ์ฝ”๋“œ๋“ค์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ๋‹ค.
    • movie state๊ฐ€ ๋ณ€ํ™”ํ•  ๋•Œ๋งŒ user๊ฐ€ ์›ํ•˜๋Š” ์˜ํ™”๋ฅผ ๊ฒ€์ƒ‰์„ ํ•˜๊ณ  ์‹ถ๋‹ค.
    • → useEffect๋ฅผ ์“ฐ์ž
  • ์‚ด์ง ๋ฌธ์ œ ๋ฐœ์ƒ
    • keyword๊ฐ€ ๋นˆ ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ๋•Œ keyword ๊ฒ€์ƒ‰ (์กฐ๊ฑด)

6.3 Recap

  • react.js ์—์„œ ๊ฐ€์žฅ ๋ฉ‹์ง„ ์ ์€ ๋ฐ”๋กœ component๋ฅผ refresh(์ƒˆ๋กœ๊ณ ์นจ) ํ•œ๋‹ค๋Š” ๊ฑฐ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ๋งˆ๋‹ค UI๋ฅผ refreshํ•œ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ refreshํ•ด๋„ ๋˜์ง€ ์•Š์•„๋„ ๋ผ์„œ ์ข‹๋‹ค.
  • ๊ฐ€๋”์€ ๋„ˆ์˜ component์•ˆ์— ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์œ„ ์ฝ”๋“œ๋Š” ์ฒ˜์Œ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰๋  ๊ฑฐ๋‹ค.
  • useEffect๋Š” react.js๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ด€์ ์—์„œ ๋งํ•˜์ž๋ฉด ๋ฐฉ์–ด๋ง‰ ๊ฐ™์€๊ฑฐ๋‹ค.

6.4 Cleanup

Cleanup funcion ์ด๋ผ๋Š” ๊ฑธ ๋ฐฐ์›Œ๋ณผ๊ฑฐ๋‹ค.

  • setShowing์„ ํ†ตํ•ด ์ด์ „ value๋ฅผ ๋ฐ›์•„์˜จ ๋‹ค์Œ์—, ๊ทธ value์˜ ๋ฐ˜๋Œ“๊ฐ’์„ returnํ• ๊ฑฐ๋‹ค.
  • ์šฐ๋ฆฌ๊ฐ€ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์ˆจ๊ธธ ๊ฒƒ์€ ๋‹ค๋ฅธ component์ผ๊ฑฐ๋‹ค.
  • component๊ฐ€ destroy๋  ๋•Œ๋„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•  ๊ฒƒ์€ function์„ returnํ•ด์ฃผ๋Š” ๊ฑฐ๋‹ค.
  • ์œ„์ฝ”๋“œ๊ฐ€ ๋ฐ”๋กœ Cleanu functuon์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
    • ๋‚˜์˜ component๊ฐ€ desetroy๋  ๋•Œ ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
    • ๋งŒ์•ฝ ๋ˆ„๊ตฐ๊ฐ€ component๊ฐ€ ์—†์–ด์งˆ ๋•Œ ์–ด๋–ค ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋‚ด๊ณ  ์‹ถ์–ดํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.
      • ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ์‚ฌ๋žŒ๋“ค์€ ๋ถ„์„ API๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ์—†์–ด์งˆ๋•Œ event listener๋ฅผ ์ง€์šฐ๊ฑฐ๋‚˜, ํ˜น์€ console.log์— ๋ญ”๊ฐ€ ๋ณด์—ฌ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์ค‘์š”ํ•œ๊ฑด, ์ด๊ฑธ๋กœ component๊ฐ€ ์–ธ์ œ create๋๋Š”์ง€, ์–ธ์ œdestroy๋๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • useEffect๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์„ ํƒ๊ถŒ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋˜‘๊ฐ™๋‹ค ์œ„์—๊ป˜ ๋” ์‰ฝ๋‹ค.(ํ™”์‚ดํ‘œ) ํ•จ์ˆ˜ํ˜• , ํด๋ž˜์Šคํ˜•
728x90
๋ฐ˜์‘ํ˜•