๊ฐœ๋ฐœ ๊ณต๋ถ€/๋ฐ๋ธŒ์ฝ”์Šค TIL

[ํด๋ผ์šฐ๋”ฉ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—”์ง€๋‹ˆ์–ด๋ง TIL] 240206 - React ๊ธฐ๋ณธ. ๊ฐ„๋‹จํ•œ ์ผ๊ธฐ์žฅ ํ”„๋กœ์ ํŠธ 2

๊ฐ€์šค์ด 2024. 2. 6. 23:15

Intro


์–ด์ œ์— ์ด์–ด ์ผ๊ธฐ์žฅ ํ”„๋กœ์ ํŠธ ์‹ค์Šต์„ ํ•™์Šตํ•˜์˜€๋‹ค.

React Hooks์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ–ˆ๋‹ค.

 

 

 

์˜ค๋Š˜ ํ•™์Šตํ•œ ๋‚ด์šฉ


React์—์„œ ๋ฐฐ์—ด ์‚ฌ์šฉํ•˜๊ธฐ - ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ

์„ธ๋ถ€ ๋ชฉํ‘œ

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•œ React์˜ List์— ์•„์ดํ…œ์„ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•ด๋ณด๊ธฐ
  • With React ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ธฐ

 

์ปดํฌ๋„ŒํŠธ & ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ƒ๊ฐํ•ด๋ณด๊ธฐ

  • ์ตœ์ƒ๋‹จ ํƒœ๊ทธ <App />์„ ๊ธฐ์ค€์œผ๋กœ ํŠธ๋ฆฌ ํ˜•ํƒœ ์ปดํฌ๋„ŒํŠธ
  • ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์ปดํฌ๋„ŒํŠธ ๋ผ๋ฆฌ๋Š” (DiaryEditor, DiaryList) ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
  • React๋Š” ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅธ๋‹ค.
  • ๋”ฐ๋ผ์„œ, App์˜ state๋ฅผ ์ปดํฌ๋„ŒํŠธ ๊ฐ๊ฐ์— ์ „๋‹ฌํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • DiaryEditor์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด setData๋ฅผ ์š”์ฒญํ•˜๊ณ  App์—์„œ ๋ณ€๊ฒฝ๋œ Data๋ฅผ DiaryList์— ์ „๋‹ฌํ•œ๋‹ค. โžก๏ธ state ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ

 

React์—์„œ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๊ธฐ

์„ธ๋ถ€ ๋ชฉํ‘œ

  • ๋ฐฐ์—ด์„ ์ด์šฉํ•œ React์˜ List์— ์•„์ดํ…œ์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•ด๋ณด๊ธฐ
  • With ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง

 

 

React LifeCycle ์ œ์–ดํ•˜๊ธฐ

Lifecycle(์ƒ์• ์ฃผ๊ธฐ)โ“

์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ๊ฐ„์— ํ๋ฆ„์— ๋”ฐ๋ผ, ํƒ„์ƒ๋ถ€ํ„ฐ ์ฃฝ์Œ์— ์ด๋ฅด๋Š” ์ˆœ๊ฐ„์— ๋”ฐ๋ฅธ ๋‹จ๊ณ„์ ์ธ ๊ณผ์ •

 

 

 

 

React Hooks

useState, useEffect, useRef...

  • 2019๋…„ 6์›” ์ •์‹ ์ถœ์‹œ๋œ ๊ธฐ๋Šฅ์ด๋‹ค.
  • classํ˜• ์ปดํฌ๋„ŒํŠธ์˜ ๊ธธ์–ด์ง€๋Š” ์ฝ”๋“œ ๊ธธ์ด ๋ฌธ์ œ, ์ค‘๋ณต ์ฝ”๋“œ, ๊ฐ€๋…์„ฑ ๋ฌธ์ œ ๋“ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ–ˆ๋‹ค.

useEffect๋กœ lifecycle ๊ตฌํ˜„ํ•˜๊ธฐ

import React, { useEffect } from 'react';

useEffect(() => {
  // todo...
}, []);
  • ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ callbackํ•จ์ˆ˜์™€ Dependency Array(์˜์กด์„ฑ ๋ฐฐ์—ด)์„ ๋ฐ›๋Š”๋‹ค.
  • ์˜์กด์„ฑ ๋ฐฐ์—ด ๋‚ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์ด ๋ณ€ํ™”ํ•˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
  • ๋นˆ ๋ฐฐ์—ด์„ ์ „๋‹ฌ ์‹œ ์ตœ์ดˆ ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰์ด ๋œ๋‹ค. โžก๏ธ mount ๊ตฌํ˜„ ๊ฐ€๋Šฅ
useEffect(() => {
  console.log('mount!');
}, []);
  • Dependency Array๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋œ๋‹ค โžก๏ธ update
useEffect(() => {
  console.log('update!');
});
  • unmount ๊ตฌํ˜„
const UnmountTest = () => {
  useEffect(() => {
    console.log('mount!');
    return () => {
      // unmount ์‹œ์ ์— ์‹คํ–‰๋˜๊ฒŒ ๋จ
      console.log('unmount!');
    };
  }, []);
  return <div>Unmount Testing Component</div>;
};

 

 

 

 

๋งˆ๋ฌด๋ฆฌ


React Hooks๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑด ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ž๋Š”๋ฐ ์ด๋ฒˆ ์‹ค์Šต์„ ํ†ตํ•ด ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. ๐Ÿ˜