본문 바로가기

React

[React] useContext

0. useContext를 사용하는 이유 

- context를 이용하면 단계마다 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 제공할 수 있습니다.
- context는 React 컴포넌트 트리 안에서 전역적(global)이라고 볼 수 있는 데이터를 공유할 수 있도록 고안된 방법입니다.
- context의 주된 용도는 다양한 레벨에 네스팅된 많은 컴포넌트에게 데이터를 전달하는 것입니다.
출처: Context - React 공식 문서
  • 즉 글로벌하게 쓰고 싶은 데이터를 저장하는 곳이 Context이다. 
  • 우리의 프로젝트에서는 로그인 정보를 저장하기 위해서 사용하였다.

 

1. createContext : Context 생성 

 

  • Context를 생성하기 위해 createContext 함수를 사용한다.
  • createContext의 파라미터에는 해당 Context에 initilaValue값을 입력한다.
  • 기본값을 따로 지정하지 않을 경우에는 파라미터를 비워두거나 null을 입력.
// context.js

import React from "react";
export const UserNameContext = React.createContext(null);

또는 아래처럼 

// context.js

import React, { createContext } from "react";
export const UserNameContext = createContext(null);

 

2. Provider : Context의 값을 설정

 

  • 생성된 Context 내부에는 Provider 라는 컴포넌트가 존재한다.
  • Provider 컴포넌트는 value prop을 받아서 이 값을 하위에 있는 컴포넌트에게 전달한다. 
  • Context의 값을 설정할 때는 이 Provider의 value prop에 전달해주면 된다.
  • 저장된 값을 사용할 컴포넌트들을 Provider로 감싸준다. 

 

 

// App.js

import React from "react";
import Screen from "./Screen";
import { UserNameContext } from "./context";

export default function App() {
  return (
    <UserNameContext.Provider value="John">
      <Screen />
    </UserNameContext.Provider>
  );
}

 

3. useContext

 

  • Provider 컴포넌트로 감싸져 있는 컴포넌트에서는 Context를 사용할 수 있다. 
  • 이때 useContext를 이용하고 인자로는 맨 처음에 만든 Context를 넘겨줘야 한다. 
  • 따라서 Context 를 import하고 useContext를 사용한다. 
// Screen.js

import React, { useContext } from "react";
import { UserNameContext } from "./context";

export default function Screen() {
  const userName = useContext(UserNameContext);
  return <p>My name is {userName}</p>;
}

 

'React' 카테고리의 다른 글

[React] Suspense  (0) 2022.03.11
접근 제한 라우팅 구현  (0) 2022.03.05
경로 설정  (0) 2022.03.05
React-Roter v6  (0) 2022.03.01
접근 제한 라우팅(Access Control & Authentication)  (0) 2022.02.28