useContext

ํ•™์Šต ํ‚ค์›Œ๋“œ

  • useContext

๐Ÿ“– useContext

  • Context๋กœ ๋ถ„๋ฅ˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ์—ญํ• ํ•˜๋Š” Hook

๋ฆฌ์•กํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ props๋ฅผ ํ†ตํ•ด '๋‹จ๋ฐฉํ–ฅ'์œผ๋กœ ํ๋ฅธ๋‹ค. ์—„์ฒญ ํฐ ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ํ•„์š”ํ•œ ์ „์—ญ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GlobalData์ธ ์ „์—ญ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด props๋กœ ๋‹จ๊ณ„๋ณ„๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ•œ๋‹ค.

  • ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

  • props๋ฅผ ๊ณ„์† ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํฌ๋„ŒํŠธ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

  • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์™€ ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•ด ์ฃผ๋Š” Context API๋ฅผ ์ œ๊ณตํ•œ๋‹ค. Context๋Š” ์•ฑ ์•ˆ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ผ๋ฆฌ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. Context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Props๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ผ์ด ์ „๋‹ฌํ•ด ์ฃผ์ง€ ์•Š์•„๋„ ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ data๊ฐ€ ํ•„์š”ํ•œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๋“ค์€ useContext ํ›…์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿค” Context๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ณ ๋ คํ•  ๊ฒƒ

  • Context API๋Š” ์ „์—ญ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋งŒ ์ˆ˜ํ–‰ ํ•œ๋‹ค.

์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์˜ Context๊ฐ€ ๋งŒ์•ฝ ๋ณ€๊ฒฝ๋˜๋Š” state ๊ฐ’์ด๋ผ๋ฉด state๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ๋ฆฌ๋ Œ๋”๋ง ์ผ์–ด๋‚˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๋Š” ์ด์Šˆ๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ React.memo ๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๋˜ํ•œ Context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์ง€๋ฏ€๋กœ ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ ํ•ด์•ผ ํ•œ๋‹ค.

Context์˜ ์ฃผ๋œ ๋ชฉ์ ์ธ ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ์ด ์žˆ๋Š” ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ ์ „์—ญ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋ฆฌ์•กํŠธ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” Context๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋‹จ์ง€ Prop Drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด๋ผ๋ฉด Component Composition(์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ)์ด ๋” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค.

๐Ÿค” ๊ทธ๋Ÿผ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ ๋  ์ˆ˜ ์žˆ์„๊นŒ?

  • ์ƒํƒœ๋ณ€ํ™”๊ฐ€ ๊ฑฐ์˜ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ํ…Œ๋งˆ์™€ ๊ฐ™์€ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ์— ์ ํ•ฉ

๐Ÿค– useContext ์‚ฌ์šฉ๋ฒ•

1. React.createContext

Context ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. defaultValue ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํŠธ๋ฆฌ ์•ˆ์—์„œ ์ ์ ˆํ•œ Provider๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์„ ๋•Œ๋งŒ ์“ฐ์ด๋Š” ๊ฐ’์ด๋‹ค.

import { createContext } from "react";

const MyContext = React.createContext(defaultValue);

2. Context.Provider

Provider๋Š” value prop์„ ๋ฐ›์•„์„œ ์ด ๊ฐ’์„ ํ•˜์œ„์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

import { MyContext } from "./context/MyContext";

<MyContext.Provider value={/* ์–ด๋–ค ๊ฐ’ */}>

๐Ÿ”— ์ฐธ๊ณ 

Last updated