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

Language/React

[โš›๏ธ] useContext

์ฑ„._. 2025. 1. 30. 21:07

useContext

 

๐Ÿ“Prop drilling

  • props์˜ ์ „๋‹ฌ์ด ๋„ˆ๋ฌด ๊นŠ์–ด์ง€๋ฉด ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ
  • ๋ฌธ์ œ์  : ๋„ˆ๋ฌด ๊นŠ์–ด์ง€๋ฉด prop์ด ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ํŒŒ์•…์ด ํž˜๋“ฌ, ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ถ”์ ์ด ํž˜๋“ฌ

 

 

๐Ÿ“์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ(react context API)

  • ํ•„์ˆ˜ ๊ฐœ๋…
    • createContext : context ์ƒ์„ฑ
    • Provider : context๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌ
    • useContext : context๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ํ•ด๋‹น context์˜ ํ˜„์žฌ ๊ฐ’์„ ์ฝ์Œ

 

 

๐Ÿ“useContext ์ ์šฉ๋ฒ•

 

[App.jsx ํŒŒ์ผ ๋‚ด์— ์ ์šฉ ์‹œ]

  1. context ํด๋” > js ํŒŒ์ผ(= context ํŒŒ์ผ / ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋™์ผํ•œ context๋ฅผ ์œ ์ง€)
  2. js ํŒŒ์ผ ๋‚ด์—์„œ creatContext(์ดˆ๊ธฐ ๊ฐ’(null))์„ ๋ณ€์ˆ˜์— ํ• ๋‹น, export
  3. ์ „์—ญ์  ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ํŒŒ์ผ์— import
  4. ๋งฅ๋ฝ์„ ์œ ์ง€ํ•  ์ปดํฌ๋„ŒํŠธ ์œ„ ์•„๋ž˜๋กœ <(context ๋ช…).Provider> </(context ๋ช…).Provider> ๊ฐ์‹ธ๊ธฐ
  5. ์ปดํฌ๋„ŒํŠธ์— value ์ž…๋ ฅ(์ดˆ๊ธฐ๊ฐ’์ด value๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋จ) : value={{ props }}
  6. ์‚ฌ์ด์— ๋‚€ ์ปดํฌ๋„ŒํŠธ์˜ prop drilling ์ง€์šฐ๊ธฐ
  7. ํ•˜์œ„ ํด๋”์—์„œ props ๊บผ๋‚ด์“ฐ๊ธฐ: useContext ํ™œ์šฉ & import => {props} = useContext(context ๋ช…);

 

[Context ํŒŒ์ผ ๋”ฐ๋กœ ์ž‘์„ฑ ์‹œ]

  1. prop drilling ์ง€์šฐ๊ธฐ (ํ›„์ˆœ์œ„๋กœ ๋‘ฌ๋„ ๊ดœ์ฐฎ์Œ)   ๐Ÿ‘‰๐Ÿป9-1 ์—์„œ ์‹คํ–‰
  2. context ํด๋” > jsx ํŒŒ์ผ (html ์š”์†Œ return)
  3. Provider ๋งŒ๋“ค๊ธฐ (ํ•จ์ˆ˜ ํ˜•์‹)
    3-1. Provider๋Š” ํ•˜์œ„ ์š”์†Œ๋“ค์„ ๋ฌถ์–ด์„œ ์ฃผ์ž…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— props๋กœ {children}์„ ๋ฐ›์Œ
  4. createContext() ๋กœ context ๋งŒ๋“ค๊ธฐ
  5. Provider ํ•จ์ˆ˜์˜ return ๋ฌธ์— ์ฃผ์ž…ํ•  ํ˜•ํƒœ ๋งŒ๋“ค๊ธฐ
    ๐Ÿ‘‰๐Ÿป return ( <(context ๋ช…).Provider> {children} </(context ๋ช…).Provider> )
  6. export Provider
  7. App.jsx (์ตœ์ƒ์œ„ ํŒŒ์ผ)์—์„œ Provider ๊ฐ์‹ธ๊ธฐ
  8. Provider ๋‚ด์—์„œ ํ•„์š”ํ•œ value ์ฃผ์ž…ํ•˜๊ธฐ
  9. ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ useContext()
    9-1. props ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น

[Context]

//OlympicContext.jsx
import { createContext } from "react";

export const OlympicContext = createContext();   //export ํ•„์ˆ˜!

export function OlympicProvider({ children }) {   //export ํ•„์ˆ˜!
   return (
    <OlympicContext.Provider
      value={
        (sortType,
        ...  //์ƒ๋žต
        removeNation)
      }
    >
      {children}
    </OlympicContext.Provider>
  );
}

 

[App]

// App.jsx์˜ return
return (
    <OlympicProvider>
      <Radio />
      <Header />
      <List />
    </OlympicProvider>
  );

 

[Context ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ]

// Radio.jsx
const Radio = () => {
  const { sortType, setSortType } = useContext(OlympicContext);
  return ();
  
  
// Header.jsx
export const Header = () => {
  const { nation, setNation, addNewItem, upDate } = useContext(OlympicContext);
  return ();


// List.jsx
const List = () => {
  const { nationList, removeNation } = useContext(OlympicContext);
  return ();

 

 

๐Ÿ“์ฃผ์˜์‚ฌํ•ญ

  •  provider์˜ value์˜ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€์ง€ ์•Š๋„๋ก!!!!
    (ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ๋“  ๊ฐ’์ด ๋‹ฌ๋ผ์ง)

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

[โš›๏ธ] custom hook  (0) 2025.01.30
[โš›๏ธ] memoization  (0) 2025.01.30
[โš›๏ธ] useEffect, useRef  (0) 2025.01.30
[โš›๏ธ] useState : ํ•จ์ˆ˜ํ˜• ์—…๋ฐ์ดํŠธ  (0) 2025.01.30
[โš›๏ธ] CSS in JS(Styled-components, GlobalStyles  (1) 2025.01.27
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2026/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ