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

web/react

createContext

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

createContext

 

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

**createContext**๋Š” React์—์„œ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์˜ˆ์š”.
์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ€๋ชจ → ์ž์‹ → ์†์ž์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•  ๋•Œ, ์ด๋ฅผ ๋‹จ์ˆœํ™”ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ” ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ: ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ ์ด์•ผ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์ด ํ–„๋ฒ„๊ฑฐ ๊ฐ€๊ฒŒ์—์„œ ์ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๐Ÿ”

  1. ๊ธฐ๋ณธ ์ „๋‹ฌ ๋ฐฉ์‹: ์ง์ ‘ ์ „๋‹ฌํ•˜๊ธฐ
    • **์ฃผ๋ฐฉ์žฅ(๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ)**์ด ์žฌ๋ฃŒ(๋ฐ์ดํ„ฐ)๋ฅผ ์ค€๋น„ํ•˜๊ณ ,
    • ์ง์›A → ์ง์›B → ์ง์›C์—๊ฒŒ ์ˆœ์„œ๋Œ€๋กœ ์ „๋‹ฌํ•ด์•ผ ํ•ด์š”.
    • ์ค‘๊ฐ„ ์ง์›๋“ค์ด ๋งค๋ฒˆ ์žฌ๋ฃŒ๋ฅผ ๋ฐ›์•„์„œ ๋‹ค์‹œ ์ „๋‹ฌํ•ด์•ผ ํ•˜๋‹ˆ๊นŒ ๋ณต์žกํ•˜๊ณ  ๋ฒˆ๊ฑฐ๋กญ๊ฒ ์ฃ ?
  2. createContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด?
    • ์ฃผ๋ฐฉ์žฅ(๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ)์ด **๋ชจ๋“  ์ง์›(๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ)**์—๊ฒŒ ์žฌ๋ฃŒ๋ฅผ ํ•œ ๋ฒˆ์— ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” **๊ณต์œ  ์ฐฝ๊ณ (Context)**๋ฅผ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
    • ์ง์›๋“ค์€ ์ฐฝ๊ณ ์—์„œ ํ•„์š”ํ•œ ์žฌ๋ฃŒ๋ฅผ ๋ฐ”๋กœ ๊บผ๋‚ด ์“ธ ์ˆ˜ ์žˆ์–ด์š”.
    • ์ค‘๊ฐ„ ์ง์›๋“ค์ด ์ „๋‹ฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ ธ์„œ ํ›จ์”ฌ ํŽธ๋ฆฌํ•ด์ง‘๋‹ˆ๋‹ค!

 

๐Ÿ› ๏ธ createContext ์‚ฌ์šฉ๋ฒ•

์ด์ œ createContext๋ฅผ ์ฝ”๋“œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ๊ฒŒ์š”.
์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณต์œ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

1. Context ๋งŒ๋“ค๊ธฐ

๋จผ์ € createContext๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๊ณต์œ  ์ฐฝ๊ณ ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

// Context ์ƒ์„ฑ
export const UserContext = createContext(null);

export function UserProvider({ children }) {
  const [user, setUser] = useState({ name: 'ํ™๊ธธ๋™', age: 25 });

  return (
    <UserContext.Provider value={{ user, setUser }}>
      {children}
    </UserContext.Provider>
  );
}

์„ค๋ช…:

  • createContext(null): UserContext๋ผ๋Š” ๊ณต์œ  ์ฐฝ๊ณ ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ๊ฐ’์€ null์ด์—์š”.
  • UserProvider: UserContext.Provider๋ฅผ ์‚ฌ์šฉํ•ด์„œ user ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณต๊ธ‰์ž ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์š”.
  • value: value ์†์„ฑ์„ ํ†ตํ•ด ๊ณต์œ ํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” user์™€ setUser๋ฅผ ์ œ๊ณตํ•ด์š”.

2. Context ๊ณต๊ธ‰์ž ์ ์šฉํ•˜๊ธฐ

UserProvider๋ฅผ ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์— ์ ์šฉํ•ด์„œ ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

import React from 'react';
import { UserProvider } from './UserContext';
import UserProfile from './UserProfile';

function App() {
  return (
    <UserProvider>
      <div>
        <h1>Context ์˜ˆ์ œ</h1>
        <UserProfile />
      </div>
    </UserProvider>
  );
}

export default App;

์„ค๋ช…:

  • **UserProvider**๋กœ ์•ฑ ์ „์ฒด๋ฅผ ๊ฐ์‹ธ์ค๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ UserContext์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ผ์š”.

 

3. Context ์‚ฌ์šฉํ•˜๊ธฐ

์ด์ œ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ useContext๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์™€์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import React, { useContext } from 'react';
import { UserContext } from './UserContext';

function UserProfile() {
  const { user, setUser } = useContext(UserContext); // Context ์‚ฌ์šฉ

  const handleChangeName = () => {
    setUser({ ...user, name: '์ด์ˆœ์‹ ' }); // ์ด๋ฆ„ ๋ณ€๊ฒฝ
  };

  return (
    <div>
      <h2>์‚ฌ์šฉ์ž ์ •๋ณด</h2>
      <p>์ด๋ฆ„: {user.name}</p>
      <p>๋‚˜์ด: {user.age}</p>
      <button onClick={handleChangeName}>์ด๋ฆ„ ๋ณ€๊ฒฝ</button>
    </div>
  );
}

export default UserProfile;

์„ค๋ช…:

  • useContext(UserContext): UserContext์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  • ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด setUser๋ฅผ ์‚ฌ์šฉํ•ด user์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™”๋ฉด์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿš€ ๊ฒฐ๊ณผ ํ™”๋ฉด

  1. ํ™”๋ฉด์— ์ด๋ฆ„๊ณผ ๋‚˜์ด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  2. "์ด๋ฆ„ ๋ณ€๊ฒฝ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ด๋ฆ„์ด **"์ด์ˆœ์‹ "**์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

 

๐ŸŒŸ createContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ์ 

  1. ์ค‘๊ฐ„ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ๋ผ์š”
    • ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ „๋‹ฌํ•  ํ•„์š” ์—†์ด ํ•„์š”ํ•œ ๊ณณ์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.
  2. ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ ธ์š”
    • props๋ฅผ ๊ณ„์† ์ „๋‹ฌํ•˜๋Š” ๋Œ€์‹  Context๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ๋” ๊ฐ„๊ฒฐํ•ด์ง‘๋‹ˆ๋‹ค.
  3. ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ ์œ ์ง€
    • ์ค‘์•™์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋‹ˆ๊นŒ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ

React์˜ **createContext**๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • **"๊ณต์œ  ์ฐฝ๊ณ "**๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ์–ด์š”.
  • useContext๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ์“ฐ๋Š” ๊ฒƒ๋„ ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
728x90
๋ฐ˜์‘ํ˜•

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

lazy  (0) 2024.12.16
forwardRef  (0) 2024.12.16
cache  (0) 2024.12.16
act  (0) 2024.12.16
[React] Typescript #01  (0) 2024.02.22
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•
250x250