25.06.11 - se5ri/React GitHub Wiki

ch03-class

๐Ÿ“œ 02-functionbase ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ - ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ™์ด ์‚ฌ์šฉ

๐Ÿ“œ 03-lifecycle ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ - ์ปดํฌ๋„ŒํŠธ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด

Class Component์™€ Function Component๋น„๊ต

  • Class Component
    • constructor์„ ํ†ตํ•œ state์˜ ์ •์˜,
    • setState() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด state ์—…๋ฐ์ดํŠธ,
    • Lifecycle Methods ์ œ๊ณต,
  • Function Component
    • Lifecycle์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ๊ตฌํ˜„X,
    • Hooks ์˜ ์‚ฌ์šฉ

ch04-hooks

๐Ÿ“œ 01useState-์ƒํƒœ๊ด€๋ฆฌ

  • ๋ฆฌ์•กํŠธ ํ›… ๊ฐœ๋…
    • ๋ฆฌ์•กํŠธ ํ›…์ด๋ž€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋˜๋Š” ๋™์•ˆ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ํ•จ์ˆ˜

      • ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์ปดํฌ๋„ŒํŠธ ๋ฐ–์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
      • ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ–ˆ๋˜ ์ƒํƒœ ๊ด€๋ฆฌ์™€ ์ƒ๋ช… ์ฃผ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.
      • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๊ฐ€ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜์—ฌ ํ™œ์šฉ๋„๊ฐ€ ๋†’์•„์กŒ๊ณ , ์ผ๋ฐ˜ํ™”๋˜์—ˆ๋‹ค.
    • useState

      const [state, setState] = useState(initialState);
    • useEffect

      useEffect(setup, dependencies?);
      • ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ํ›…
      • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์•„๋ž˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ ๊ตฌํ˜„
        • componentDidMount() : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ์™„๋ฃŒ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ € DOM ํŠธ๋ฆฌ์— ๋ฐ˜์˜๋œ ํ›„ ํ˜ธ์ถœ
        • componentDidUpdate() : ๋ธŒ๋ผ์šฐ์ € DOM ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ ํ›„ ํ˜ธ์ถœ
        • componentWillUnmount() : ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
        • ...
      • useEffect ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ธ ๊ฐ€์ง€ ์ฝ”๋“œ์˜ ์‹œ์ ์— ๋งž๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
        • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ž‘์—… ์™ธ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…
          • ํƒ€์ด๋จธ ์„ค์ •

            function ... {
            	...
            
            	setTimeout(() => {
            		hello = '200';
            		console.log(hello);
            	}, 1000)
            	
            	...
            	
            	return (
            		...
            		<h1>{hellol}</h1>
            		...
            	);
            }
            • ๋น„๋™๊ธฐํ•จ์ˆ˜ setTimeout ์˜ ๋ณ€๊ฒฝ๊ฐ’์€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š๋Š”๋‹ค.
            • useEffect ํ›…์„ ๋ฐ›์•„์„œ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
          • ๋กœ๊น…

        • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ดํ›„ ์ฒ˜๋ฆฌํ•  ์ž‘์—…
          • DOM ์ˆ˜๋™ ์กฐ์ž‘
        • side effect๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—… (์ปดํฌ๋„ŒํŠธ๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ์œ ์ง€)
          • ๋ฐ์ดํ„ฐ fetching
  • ๐Ÿ’ป App.tsx

๐Ÿ“œ 02 useEffect - side effect ๊ด€๋ฆฌ(๋ฏธ์™„์„ฑ)

  • useEffect

    • ์ปดํฌ๋„ŒํŠธ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ํ›…
    • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ์•„๋ž˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ ๊ตฌํ˜„
      • componentDidMount(): ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ ์™„๋ฃŒ๋˜๊ณ  ๋ธŒ๋ผ์šฐ์ € DOM ํŠธ๋ฆฌ์— ๋ฐ˜์˜๋œ ํ›„ ํ˜ธ์ถœ
      • componentDidUpdate(): ๋ธŒ๋ผ์šฐ์ € DOM ์—…๋ฐ์ดํŠธ ์™„๋ฃŒ ํ›„ ํ˜ธ์ถœ
      • componentWillUnmount(): ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
      • ...
    • useEffect์—์„œ ์ฃผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋Šฅ
      • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ž‘์—… ์™ธ์˜ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…
        • ํƒ€์ด๋จธ ์„ค์ •
        • ๋กœ๊น…
      • ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง ์ดํ›„์— ์ฒ˜๋ฆฌํ•  ์ž‘์—…
        • DOM ์ˆ˜๋™ ์กฐ์ž‘
      • side effect๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…(์ปดํฌ๋„ŒํŠธ๋ฅผ ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋กœ ์œ ์ง€)
        • ๋ฐ์ดํ„ฐ fetching

    API

    useEffect(setup, dependencies?);
    

    ๋งค๊ฐœ๋ณ€์ˆ˜

    • setup: ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ(1-4), ์—…๋ฐ์ดํŠธ(2-5), ์ œ๊ฑฐ(3-1) ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
      • setup์ด ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด, ๋ฆฌํ„ดํ•œ ํ•จ์ˆ˜๋ฅผ cleanup์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ์–ธ๋งˆ์šดํŠธ ๋  ๋•Œ ํ˜ธ์ถœ๋จ (cleanup์ด ๋จผ์ € ์‹คํ–‰๋˜๊ณ  setup์ด ๋’ค์— ์‹คํ–‰๋จ)
    • dependencies (์„ ํƒ): ์˜์กด ๊ฐ์ฒด ๋ฐฐ์—ด
      • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ setup ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ์ง€ ๋ง์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ
      • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋  ๋•Œ๋Š” dependencies ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด setup์ด ํ˜ธ์ถœ๋จ
      • dependencies๋ฅผ ์ƒ๋žตํ•˜๋ฉด, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ ํ•ญ์ƒ setup์ด ํ˜ธ์ถœ๋จ
      • dependencies์— ๋นˆ ๋ฐฐ์—ด์„ ์ง€์ •ํ•˜๋ฉด ์—…๋ฐ์ดํŠธ์—์„œ๋Š” ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ
      • dependencies๋ฅผ ์ง€์ •ํ•˜๋ฉด, ํ•ด๋‹น ๊ฐ’๋“ค์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ setup ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋จ
  • ๐Ÿ’ป counter.tsx

โš ๏ธ **GitHub.com Fallback** โš ๏ธ