FA/React

20221005 React Hooks - useContext

๐Ÿ๐Ÿ๋ฆผ 2022. 10. 5. 11:17

useContext

์—ฌ๋Ÿฌ ๊ณณ์— ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ ค์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์ปดํฌ๋„ŒํŠธ์˜ ๋‹จ๊ณ„๊ฐ€ ๋งŽ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ Prop์„ ๋‚ด๋ ค์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ”„๋กญ ๋“œ๋ฆด๋ง(Prop Drilling) ์ด๋ผ๊ณ  ํ•จ.

Context๋Š” ํ”„๋กญ ๋“œ๋ฆด๋ง์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ

 

React Context๋Š” ์ „์—ญ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • ์ „์—ญ์„ ํ”„๋กญ์Šค๋กœ ๋‹จ๊ณ„์ ์œผ๋กœ ํ•˜๋ ค๊ณ ํ•œ๋‹ค๊ณ ํ•˜๋ฉด ํž˜๋“ฌ
  • ์ปจํ…์ŠคํŠธ๊ฐ€ ์•ฑ์•ˆ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ
  • ์ „์—ญ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ์— ํŽธํ•จ
  • ์ƒ์œ„์ปดํฌ๋„ŒํŠธ์—์„œ ํ•„์š”ํ•œ ๊ฐ’์„ ๋‹จ๊ณ„๋กœ๋ณ„๋กœ ํ†ตํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ”๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์Œ
  • Context๋กœ ๊ณต์œ ํ•œ๊ฑธ > useContext๋กœ ๋ฐ”๋กœ ๋ฐ›์•„์™€์„œ ์“ธ ์ˆ˜ ์žˆ์Œ

๋‹จ์  ์ปจํ…์ŠคํŠธ๋Š” ๊ผญ ํ•„์š”ํ•  ๋•Œ๋งŒ ์จ์•ผ๋Œ ์ด์œ 

- ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›Œ ์งˆ ์ˆ˜ ์žˆ์Œ

- Prop drilling์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด๋ผ๋ฉด Componemt Composition(์ปดํฌ๋„ŒํŠธ ํ•ฉ์„ฑ)์„ ๋” ๊ฐ„๋‹จํ•  ์ˆ˜๋„ ์žˆ์Œ

 

1. App.js ์—์„œ ์ปดํฌ๋„ŒํŠธ์—์„œ Context๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๋ชจ๋“  ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ํ•„์š”ํ•œ์ง€

2. ํ•„์š”ํ•œ ํ•˜์œ„์ปดํฌ๋„ŒํŠธ๋Š” useContext๋ฅผ ์‚ฌ์šฉ(ํ”„๋กญ์Šค ์‚ฌ์šฉใ„ด)

import { useState, createContext, useContext } from "react";
import ReactDOM from "react-dom/client";

const UserContext = createContext();

function Component1() {
  const [user, setUser] = useState("Jesse Hall");

  return (
    <UserContext.Provider value={user}>
      <h1>{`Hello ${user}!`}</h1>
      <Component2 />
    </UserContext.Provider>
  );
}

function Component2() {
  return (
    <>
      <h1>Component 2</h1>
      <Component3 />
    </>
  );
}

function Component3() {
  return (
    <>
      <h1>Component 3</h1>
      <Component4 />
    </>
  );
}

function Component4() {
  return (
    <>
      <h1>Component 4</h1>
      <Component5 />
    </>
  );
}

function Component5() {
  const user = useContext(UserContext);

  return (
    <>
      <h1>Component 5</h1>
      <h2>{`Hello ${user} again!`}</h2>
    </>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Component1 />);

 

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

//Context๋Š” createContext ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
import { createContext } from 'react';

const LocaleContext = createContext();


// ๊ธฐ๋ณธ๊ฐ’์„ ๋„ฃ์–ด ์ค„ ์ˆ˜๋„ ์žˆ์Œ
import { createContext } from 'react';

const LocaleContext = createContext('ko');

2. Context ์ ์šฉํ•˜๊ธฐ

//Context๋ฅผ ์“ธ ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ’์„ ๊ณต์œ ํ•  ๋ฒ”์œ„๋ฅผ ์ •ํ•˜๊ณ  ์จ์•ผ ํ•จ
// ์ด๋•Œ ๋ฒ”์œ„๋Š” Context ๊ฐ์ฒด์— ์žˆ๋Š” Provider ๋ผ๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Œ
// ์ด๋•Œ Provider์˜ value prop์œผ๋กœ ๊ณต์œ ํ•  ๊ฐ’์„ ๋‚ด๋ ค์ฃผ๋ฉด ๋จ.

import { createContext } from 'react';

const LocaleContext = createContext('ko');

function App() {
  return (
    <div>
       ... ๋ฐ”๊นฅ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” LocaleContext ์‚ฌ์šฉ๋ถˆ๊ฐ€

       <LocaleContext.Provider value="en">
          ... Provider ์•ˆ์˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” LocaleContext ์‚ฌ์šฉ๊ฐ€๋Šฅ
       </LocaleContext.Provider>
    </div>
  );
}

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

//useContext ๋ผ๋Š” Hook์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
//์ด๋•Œ ์•„๊ทœ๋จผํŠธ๋กœ๋Š” ์‚ฌ์šฉํ•  Context๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๋จ

import { createContext, useContext } from 'react';

const LocaleContext = createContext('ko');

function Board() {
  const locale = useContext(LocaleContext);
  return <div>์–ธ์–ด: {locale}</div>;
}

function App() {
  return (
    <div>
       <LocaleContext.Provider value="en">
          <Board />
       </LocaleContext.Provider>
    </div>
  );
}

 

 

 

 

 

์ฐธ๊ณ  ๋ฐ ์ถœ์ €

https://ko.reactjs.org/docs/context.html

 

Context – React

A JavaScript library for building user interfaces

ko.reactjs.org

 

https://www.w3schools.com/react/react_usecontext.asp

 

React useContext Hook

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

์ฝ”๋“œ์ž‡ - React๋กœ ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ ๊ฐ•์˜