ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

web/react hook

useContext

dev_been94 2024. 12. 14. 11:54
728x90
๋ฐ˜์‘ํ˜•

useContext

 

๐ŸŽฏ useContext๋ž€ ๋ฌด์—‡์ผ๊นŒ?

**useContext**๋Š” React ์ปดํฌ๋„ŒํŠธ๋“ค ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.

React์—์„œ๋Š” **"์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ"**ํ•  ๋•Œ props๋ฅผ ์‚ฌ์šฉํ•˜์ฃ .
๊ทธ๋Ÿฐ๋ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ์ ์  ๊ท€์ฐฎ์•„์ ธ์š”.
๋งˆ์น˜ ๋ฆด๋ ˆ์ด ๊ฒฝ์ฃผ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ์š”!

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

 

๐Ÿ” ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ๋กœ ์ดํ•ดํ•ด๋ณด์ž

์—ฌ๋Ÿฌ๋ถ„์ด ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ๐Ÿ”
์ด๋ฒˆ์—” **ํ–„๋ฒ„๊ฑฐ์˜ "์†Œ์Šค"**๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณผ๊ฒŒ์š”!

 

1. props๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒฝ์šฐ (๋ถˆํŽธํ•œ ์ƒํ™ฉ)

์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ(์ฃผ๋ฐฉ)์—์„œ ์†Œ์Šค ์ •๋ณด๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ(ํ…Œ์ด๋ธ”)์— ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค.

  • ์ฃผ๋ฐฉํ™€ ๋งค๋‹ˆ์ €์„œ๋น™ ์ง์›ํ…Œ์ด๋ธ” ์†๋‹˜
  • ๋ฐ์ดํ„ฐ(์†Œ์Šค)๋ฅผ ๊ณ„์† ๋ฆด๋ ˆ์ด๋กœ ๋„˜๊ฒจ์•ผ ํ•ด์š”. ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ์ฃ ?

์ฝ”๋“œ๋กœ ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ๋ฉ๋‹ˆ๋‹ค:

function Kitchen() {
  const sauce = "์น˜์ฆˆ ์†Œ์Šค";

  return <Manager sauce={sauce} />;
}

function Manager({ sauce }) {
  return <Server sauce={sauce} />;
}

function Server({ sauce }) {
  return <Table sauce={sauce} />;
}

function Table({ sauce }) {
  return <p>ํ…Œ์ด๋ธ”์— ์ œ๊ณต๋œ ์†Œ์Šค: {sauce}</p>;
}

 

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์ !

  • ์†Œ์Šค๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ค‘๊ฐ„ ๋‹จ๊ณ„ ์ปดํฌ๋„ŒํŠธ์—์„œ props๋ฅผ ๋„˜๊ฒจ์ค˜์•ผ ํ•ด์š”.
  • ์ค‘๊ฐ„ ๋‹จ๊ณ„๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ ธ์š”.

2. useContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด? (๊ฐ„ํŽธํ•œ ์ƒํ™ฉ)

useContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๊ฐ„ ๋‹จ๊ณ„ ์—†์ด ๋ฐ”๋กœ **ํ•„์š”ํ•œ ๊ณณ์— ๋ฐ์ดํ„ฐ(์†Œ์Šค)**๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์š”.
์ง์ ‘ ํ…Œ์ด๋ธ”์— ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค์ฃผ๋Š” ๋Š๋‚Œ์ด์ฃ !

 

๐Ÿ› ๏ธ useContext ์ฝ”๋“œ ์˜ˆ์‹œ

import React, { createContext, useContext } from 'react';

// ์†Œ์Šค๋ฅผ ์ €์žฅํ•  Context๋ฅผ ๋งŒ๋“ค์–ด์š”
const SauceContext = createContext();

function Kitchen() {
  const sauce = "์น˜์ฆˆ ์†Œ์Šค"; // ์ฃผ๋ฐฉ์—์„œ ๋งŒ๋“  ์†Œ์Šค

  return (
    // SauceContext์— ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ด์š”
    <SauceContext.Provider value={sauce}>
      <Table />
    </SauceContext.Provider>
  );
}

function Table() {
  // useContext๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์š”
  const sauce = useContext(SauceContext);

  return <p>ํ…Œ์ด๋ธ”์— ์ œ๊ณต๋œ ์†Œ์Šค: {sauce}</p>;
}

export default Kitchen;

 

๐Ÿ” ์ฝ”๋“œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ ๊นŒ?

  1. createContext():
    • SauceContext๋ผ๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ๋งŒ๋“ค์–ด์š”.
      ์—ฌ๊ธฐ์„œ "์†Œ์Šค ์ •๋ณด"๋ฅผ ๊ด€๋ฆฌํ•ด์š”.
  2. SauceContext.Provider:
    • Provider๋Š” ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•ด์š”.
    • <SauceContext.Provider value={sauce}>์—์„œ value์— ์†Œ์Šค๋ฅผ ๋„ฃ์–ด์ฃผ์ฃ .
  3. useContext(SauceContext):
    • useContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Context์— ์ €์žฅ๋œ ์†Œ์Šค๋ฅผ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด์š”.
    • ์ค‘๊ฐ„ ๋‹จ๊ณ„ ์—†์ด ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋‹ˆ๊นŒ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜์ฃ !

๐ŸŒŸ ์ดํ•ด๋ฅผ ๋•๋Š” ๋น„์œ 

useContext๋Š” ๋งˆ์น˜ **"๊ณต์šฉ ๋ƒ‰์žฅ๊ณ "**์™€ ๊ฐ™์•„์š”.

  • ์ฃผ๋ฐฉ(์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ)์ด ๋ƒ‰์žฅ๊ณ (Context)์— ์†Œ์Šค๋ฅผ ๋„ฃ์–ด๋‘ก๋‹ˆ๋‹ค.
  • ํ…Œ์ด๋ธ”(ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ)์€ ์ด ๋ƒ‰์žฅ๊ณ ์—์„œ ํ•„์š”ํ•œ ์†Œ์Šค๋ฅผ ๊บผ๋‚ด ์“ฐ๋ฉด ๋ผ์š”.

**์ค‘๊ฐ„์— ์ „๋‹ฌํ•˜๋Š” ์‚ฌ๋žŒ(๋งค๋‹ˆ์ €, ์„œ๋น™ ์ง์›)**์ด ํ•„์š” ์—†์–ด์š”!

 

๐Ÿš€ ํ•œ ์ค„ ์š”์•ฝ

useContext๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„ ๋‹จ๊ณ„ ์—†์ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.

728x90
๋ฐ˜์‘ํ˜•

'web > react hook' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

useEffect  (1) 2024.12.14
useDeferredValue  (0) 2024.12.14
useDebugValue  (0) 2024.12.14
useCallback  (0) 2024.12.14
useActionState  (1) 2024.12.14
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250