๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ—‚ WIL/๐Ÿ“ React

๐Ÿ’ก useContext ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค...?

by nalong 2022. 8. 10.

๐Ÿ“… ๋ณธ ๊ธ€์€ 2022๋…„ 4์›” 12์ผ ๊ฐœ์ธ github์— ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

๐Ÿš€ useContext ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์•ˆ๋œ๋‹ค...?

๐Ÿค” ์ฝ”ํ…Œ ์Šคํ„ฐ๋””๊ฐ€ ๋๋‚˜๊ณ , ์ž ์‹œ ๋ฆฌ์•กํŠธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋˜ ์ค‘์—, useContext ์— ๋Œ€ํ•ด ์Šคํ„ฐ๋””์› ํ•œ๋ถ„์ด useContext ๋ฅผ ๋งŽ์ด ์“ฐ๋ฉด ์ข‹์ง€์•Š๋‹ค๋Š”  ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์œผ์…จ๋‹ค๊ณ  ํ•œ๋‹ค. useContext ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๋‚จ๋ฐœํ•˜๋Š” Props ์ „๋‹ฌ์„ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ...
์™œ?????? ๋ผ๋Š” ์ƒ๊ฐ์— ์ด๋ฒˆ WIL ์˜ ์ฃผ์ œ๋Š” useContext ์ด๋‹ค.

1๏ธโƒฃ  useContext ๋ž€?

context๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹จ๊ณ„๋งˆ๋‹ค ์ผ์ผ์ด props๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š๊ณ ๋„ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์ „์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ก ์ผ๋ฐ˜์ ์ธ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋Š” ์œ„์—์„œ ์•„๋ž˜๋กœ (์ฆ‰, ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ์ž์‹์—๊ฒŒ) props๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์˜ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์— ์ „ํ•ด์ค˜์•ผ ํ•˜๋Š” props์˜ ๊ฒฝ์šฐ (์˜ˆ๋ฅผ ๋“ค๋ฉด ์„ ํ˜ธ ๋กœ์ผ€์ผ, UI ํ…Œ๋งˆ) ์ด ๊ณผ์ •์ด ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. context๋ฅผ ์ด์šฉํ•˜๋ฉด, ํŠธ๋ฆฌ ๋‹จ๊ณ„๋งˆ๋‹ค ๋ช…์‹œ์ ์œผ๋กœ props๋ฅผ ๋„˜๊ฒจ์ฃผ์ง€ ์•Š์•„๋„ ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ด๋Ÿฌํ•œ ๊ฐ’์„ ๊ณต์œ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ useContext์— ๊ด€ํ•ด ๊ธฐ์žฌ๋˜์–ด์žˆ๋Š” ์„ค๋ช…์ด๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์— ๊ธฐ์žฌ๋œ ์œ„์˜ ์„ค๋ช…๋งŒ์œผ๋กœ useContext ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜์—ˆ๋‹ค.( ์–ธ์  ๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ์ฝ”์น˜๋‹˜๊ป˜ ๋ฆฌ์•กํŠธ ๊ด€๋ จ๋œ ์ฑ… ์ถ”์ฒœ์„ ์—ฌ์ญค๋ณด์•˜๋Š”๋ฐ ์ฑ…๋ณด๋‹ค ๊ณต์‹๋ฌธ์„œ! ๋ผ๋Š” ๋‹ต๋ณ€์„ ์ฃผ์…จ๋Š”๋ฐ, ๊ทธ ์ด์œ ๊ฐ€ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค. )
์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋‹ค์‹œ useContext ์— ๋Œ€ํ•ด ๋งํ•ด๋ณด์ž๋ฉด...์Œ....๐Ÿค” (tmi...์š”์ฆ˜ ๊ธ€์„ ์“ธ๋•Œ, ์ตœ๋Œ€ํ•œ ๋‚˜์˜ ์–ธ์–ด๋กœ ํ’€์ดํ•ด์„œ ์“ฐ๊ณ ์ž ๋…ธ๋ ฅํ•œ๋‹ค....์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ์ž˜ ๋˜์ง€๋Š” ์•Š์ง€๋งŒ.. ๊ณ„์†ํ•ด์„œ ๊ณ ๋ฏผํ•˜๋‹ค ๋ณด๋ฉด, ๋˜์ง€์•Š์„๊นŒ....?) ์•„๋ฌดํŠผ ๋‹ค์‹œ ๋Œ์•„์™€์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ ๋Œ€ํ•™๋ณ‘์›์— 5์ธต์— ์žˆ๋Š” ์™ธ๊ณผ A์„ ์ƒ๋‹˜์—๊ฒŒ ์ง„๋ฃŒ๋ฅผ ๋ณด์•„์•ผํ•œ๋‹ค๋ฉด, ์ผ๋‹จ 1์ธต์— ์žˆ๋Š” ์ ‘์ˆ˜์ฒ˜์— ์ ‘์ˆ˜๋ฅผ ํ•  ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ 2์ธต, 3์ธต, 4์ธต, 5์ธต์— ๊ฐ ์ธต์— ์ ‘์ˆ˜์ฒ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•˜๊ณ , ๊ทธ๋Ÿผ ๋‚ด๊ฐ€ 5์ธต์— ์žˆ๋Š” ์™ธ๊ณผ A ์„ ์ƒ๋‹˜์„ ๋งŒ๋‚˜๊ธฐ ์œ„ํ•ด 2์ธต์—๋„ ์ ‘์ˆ˜ -> 3์ธต์—๋„ ์ ‘์ˆ˜ -> 4์ธต์—๋„ ์ ‘์ˆ˜ -> 5์ธต์—๋„ ์ ‘์ˆ˜ ํ›„์— ์„ ์ƒ๋‹˜์„ ๋งŒ๋‚˜์ง„ ์•Š๋Š”๋‹ค!!!! ๊ทธ์ € 1์ธต์— ํ•œ๋ฒˆ ๋“ฑ๋ก์„ ํ•˜๊ณ  5์ธต์œผ๋กœ ๊ฐ€์„œ ๋‚˜๋ฅผ ๋ถ€๋ฅด๋ฉด ๋‚˜๋Š” ์ง„๋ฃŒ์‹ค์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค!

useContext ๋„ ๋˜‘๊ฐ™๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„ ์—˜๋ฆฌ๋จผํŠธ์— Props๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ„์† ๋„˜๊ฒจ์ค„ ํ•„์š”๊ฐ€ ์—†์ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ˆœ๊ฐ„์ด๋™ ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ๋‹ค!

2๏ธโƒฃ  useContext ์‚ฌ์šฉ๋ฐฉ๋ฒ• ?

โœ… createContext : context ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ.

const { Provider, Consumer } = React.createContext(defaultValue)

โœ”๏ธ defaultValue : Context ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์œ„์— Provider๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’.
๐Ÿ“ Provider value๋กœ undefined ๋ฅผ ์ „๋‹ฌํ•˜๋ฉด, Consumer ๊ฐ€ defaultValue ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.

โœ… Provider : ์ƒ์„ฑํ•œ context๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• .
โœ”๏ธ ํ•˜๋‚˜์˜ Provider ์— ์—ฌ๋Ÿฌ๊ฐœ์˜ Consumer ๋“ค์ด ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

โœ… Consumer : context์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์‹œํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ.
โœ”๏ธ context ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ.

โœ…  ์ˆœ์„œ

  1. ์ตœ์ƒ๋‹จ ์ปดํฌ๋„ŒํŠธ์—์„œ createContext๋ฅผ import.
  2. 'UserContext'๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„ ๋‚ด๋ณด๋‚ผ ์ค€๋น„๋ฅผ ํ•œ๋‹ค.
  3. ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” state๋ฅผ value๊ฐ’์— ๋‹ด์•„ ๋ณ€์ˆ˜๋กœ ์ง€์ •ํ•œ๋‹ค.
  4. ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ UserContext.Provider๋กœ ๊ฐ์‹ธ๊ณ , value๊ฐ’์„ ๋ณด๋‚ด์ค€๋‹ค.
import React, { createContext } from 'react'
import Children from './Children'

export const UserContext = createContext(defaultValue)
// defaultValue : Context ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ์œ„์— Provider๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’.

const App = () => {
  const user = {
    userId: 'abcd',
    userName: '๋‚˜์—ฐ',
  }

  return (
    <>
      <UserContext.Provider value={user}>
        <div>
          <User />
        </div>
      </UserContext.Provider>
    </>
  )
}

export default App

๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ useContext ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

โœ…  ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•

import React from 'react'
import { UserContext } from './App'

const User = () => {
  return (
    <UserContext.Consumer>
      {(user) => (
        <>
          <h2>userId๋Š” {user.userId}์ž…๋‹ˆ๋‹ค.</h2>
          <h2>userName {user.userName}์ž…๋‹ˆ๋‹ค.</h2>
        </>
      )}
    </UserContext.Consumer>
  )
}

export default User

โœ…  ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•

import React from 'react'
import { userContext } from './App'
import { UserContext } from 'react'

const User = () => {
  const { userId, userName } = useContext(UserContext)

  return (
    <>
      <h2>userId :{userId}</h2>
      <h2>userName :{userName}</h2>
    </>
  )
}

export default User

์ด ๋‘ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด์ ์„ ์•„์ง ์ฐพ์ง€๋Š” ๋ชปํ–ˆ๋Š”๋ฐ, ๋‚ด ์ƒ๊ฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋ฐ”๋กœ ์ถœ๋ ฅ๋งŒ ํ•œ๋‹ค๋ฉด consumer ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธํ•  ๊ฒƒ ๊ฐ™๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค๋ฉด ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ํŽธํ•  ๊ฒƒ๊ฐ™๋‹ค. ๋‚˜์˜ ๊ฒฝ์šฐ๋„ค๋Š” ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ์กฐ๊ธˆ ๋” ํŽธํ•ด์„œ ์‚ฌ์šฉ์ค‘์ด๋‹ค..๋‹ค๋งŒ, ์ถœ๋ ฅ๋งŒ ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒƒ๊ฐ™๋‹ค!
์ด๋ถ€๋ถ„์€ ์กฐ๊ธˆ ๋” ๋ณด์ถฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค!

3๏ธโƒฃ  context๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•  ๊ฒƒ

context์˜ ์ฃผ๋œ ์šฉ๋„๋Š” ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ์— ๋„ค์ŠคํŒ…๋œ ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง€๋ฏ€๋กœ ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์“ฐ์„ธ์š”.
์—ฌ๋Ÿฌ ๋ ˆ๋ฒจ์— ๊ฑธ์ณ props ๋„˜๊ธฐ๋Š” ๊ฑธ ๋Œ€์ฒดํ•˜๋Š” ๋ฐ์— context๋ณด๋‹ค ์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ์ด ๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต์‹๋ฌธ์„œ์— ๊ธฐ์žฌ๋œ ๋‚ด์šฉ์ด๋‹ค.
์™œ...? ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์งˆ๊นŒ....? ์ด ๋ถ€๋ถ„์„ ์ดํ•ดํ•ด๋ณด์ž.

4๏ธโƒฃ  useContext์—์„œ ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ต๋‹ค...?

์ด ๋ถ€๋ถ„๊ณผ ๊ด€๋ จํ•ด์„œ ์Šคํ„ฐ๋”” ํŒ€์›๋ถ„์ด ์˜ฌ๋ ค์ฃผ์‹  ์„ค๋ช…์ด๋‹ค...!!
์ด ๋ถ€๋ถ„์€ ์‚ฌ์‹ค ์ดํ•ด๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ๋˜์ง€ ์•Š๋Š”๊ฒƒ๊ฐ™๋‹ค ใ… ใ…  ์•ฝ๊ฐ„ ..์Œ ๊ทธ๋ ‡๊ตฌ๋‚˜...
๊ทธ๋ƒฅ ๋ฌด์กฐ๊ฑด Provider ์•ˆ์— ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผ..value ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ.. ๋ถ„๋ฆฌ๊ฐ€ ์•ˆ๋˜๋Š” ๊ตฌ๋‚˜ -> ๊ทธ๋ž˜์„œ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š”๊ตฌ๋‚˜! ์ด์ •๋„์˜ ๋А๋‚Œ์ด๋‹ค...
์กฐ๊ธˆ ๋” ๊ณ ๋ฏผํ•˜๊ณ  ์ž๋ฃŒ๋ฅผ ์ฐพ์•„๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค. (์‚ฌ์‹ค ์ด ๋ถ€๋ถ„์„ ์™„๋ฒฝํžˆ ํ•œ ์ƒํƒœ์—์„œ ๊ธ€์„ ์“ฐ๊ณ  ์‹ถ์–ด์„œ, ๊ณ„์† ๊ธ€์„ ์™„์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฏธ๋ฃจ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋งˆ๋ƒฅ ๋ฏธ๋ฃฐ์ˆ˜๋Š” ์—†์–ด์„œ ์ด๋ ‡๊ฒŒ ์ ์–ด๋‘๊ณ , ์ˆ˜์ •ํ•  ์˜ˆ์ •์ด๋‹ค!)

5๏ธโƒฃ  ์ฃผ์˜์‚ฌํ•ญ! ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋œ๋‹ค...!!

useContext ์˜ ๋‹จ์ ์œผ๋กœ Provider์˜ ๋ถ€๋ชจ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋งˆ๋‹ค ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค์‹œ ๋ Œ๋”๋ง ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค!!๐Ÿ˜ฌ ํ•˜์ง€๋งŒ ์—ญ์‹œ๋‚˜.. ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์กด์žฌํ•˜์˜€๋‹ค!

โœ… ํ•ด๊ฒฐ์ฑ… : useMemo ์‚ฌ์šฉํ•˜๊ธฐ.

function CountProvider(props) {
  const [count, setCount] = React.useState(0)
  const value = React.useMemo(() => [state, setCount], [count])
  return <CountContext.Provider value={value} {...props} />
}

ํ•ด๋‹น ์ž๋ฃŒ์—์„œ useMemo๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, state ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ, ๋ Œ๋”๋ง๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ด๊ฒŒ ์ตœ์„ ์€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค!

function CountProvider(props) {
  const [count, setCount] = React.useState(0)
  const value = React.useMemo(() => [state, setCount], [count])
  return
  ;<CountContext.Provider value={value} {...props}>
    <useCountContextComponent />
    <notUseCountContextComponent />
  </CountContext.Provider>
}

์˜ˆ๋ฅผ ๋“ค์–ด ์œ„์—์„œ useCountContextComponent ๋Š” CountContext.Provider์— ๋„˜๊ฒจ์ค€ value ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ,notUseCountContextComponent ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ํ•˜๋ฉด, ๊ฒฐ๊ตญ value ๊ฐ’์ด ๋ฐ”๋€” ๋•Œ value ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” notUseCountContextComponent ์ปดํฌ๋„ŒํŠธ๋„ ๋ Œ๋”๋ง ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ๋•Œ๋„ ๋‹ค์‹œ ๋ Œ๋”๋ง์ด ๋˜๋Š” ๋ถ€๋ถ„์€ useMemo ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์™„๋ฒฝํ•˜๊ฒŒ ๋ชจ๋“  ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ๋Š” ์—†๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค...๊ทธ๋ ‡๊ธฐ์— useMemo ๊ฐ€ ํ™•์‹คํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹Œ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค..

 

ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•ด ๋” ์ฐพ๋‹ค๋ณด๋‹ˆ ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด์žˆ๋Š” ๋ธ”๋กœ๊ทธ ๋ฅผ ๋ฐœ๊ฒฌํ•˜์˜€๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒํƒœ๊ฐ’ / ์•ก์…˜์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค! ๋‹ค๋งŒ, ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๊ณ , ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋ฆฌ๋•์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค..!!

์ด๋กœ์จ ๋‚˜์˜ ๊ถ๊ธˆ์ฆ์ด ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™๋‹ค!! (๋ฌผ๋ก , ์žฌ์‚ฌ์šฉ์„ฑ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋” ๊ณต๋ถ€ํ•ด์•ผํ•  ๋ถ€๋ถ„์ด๋‹ค.)

๋ฌผ๋ก  ์•„์ง ๋งŽ์€ ๋ถ€๋ถ„์—์„œ ๋ถ€์กฑํ•˜๊ธฐ์— ์ง€๊ธˆ์˜ ๊ธ€์€ ๊ณ„์†ํ•ด์„œ ์กฐ๊ธˆ์”ฉ ๋ณด์™„ํ•ด๋‚˜๊ฐˆ ์˜ˆ์ •์ด๋‹ค!!

 

๐Ÿ–‡ Reference

https://dongmin-jang.medium.com/reactjs-context-api-korean-%ED%95%9C%EA%B8%80-%EC%9E%91%EC%84%B1%EC%A4%91-79edaf18efff

 

GitHub - kentcdodds/old-kentcdodds.com: Kent's Homepage

Kent's Homepage. Contribute to kentcdodds/old-kentcdodds.com development by creating an account on GitHub.

github.com

 

GitHub - kentcdodds/old-kentcdodds.com: Kent's Homepage

Kent's Homepage. Contribute to kentcdodds/old-kentcdodds.com development by creating an account on GitHub.

github.com

 

 

'๐Ÿ—‚ WIL > ๐Ÿ“ React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โœ๏ธ useRef  (0) 2022.08.10
โœ๏ธ useMemo, useCallback (+ React.memo + HOC)  (0) 2022.08.10
๐Ÿ’ก Spread Syntax๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ..?  (0) 2022.08.10
SSR ๊ณผ CSR, ๊ทธ๋ฆฌ๊ณ  SEO  (0) 2022.08.10
Single Page Application  (0) 2022.08.10