React Context API 사용법 및 Props와 Context차이점

2023. 3. 16. 13:43·FE/React

📌 Context API 사용법

- 리액트 애플리케이션에서 전역적으로 데이터를 공유하고 관리하는 방법을 제공한다. (간편한 전역 상태 관리 가능)

-  상위 -> 하위 컴포넌트로 데이터 전달 시 속성(props)을 전달하지 않고도 컴포넌트 간 데이터를 공유할 수 있도록 해줌

 

1. UserContext.js 파일 생성

- createContext함수 import : 새로운 컨텍스트 생성할 때 사용하는 함수

- UserContext라는 context 생성, 초기값 null로 주고 다른 컴포넌트에서 사용할 수 있도록 export

import { createContext } from "react";
export const UserContext = createContext(null)

 

2. App.js (부모) - Provider로 하위 컴포넌트에 value값 보내기

- UserContext 컴포넌트 import

import { UserContext } from './components/UserContext
const [user, setUser] = useState('');
    return (
        <UserContext.Provider value={{user, setUser}}>
            <div className="App">
                <HeaderPage/>
                <Switch>
                    <Route path="/" component={HomePage} exact={true}/>
                    <Route path="/users" component={UsersPage}/>
                    <Route path="/chats" component={ChatsPage}/>
                    <Route path="/login" component={LoginPage}/>
                </Switch>
            </div>
        </UserContext.Provider>
    );

- 상태변수 [user,setUser]를 생성해 초기값으로 ' '(공백)을 담아준다.

- UserContext.Provider: UserContext라는 컨텍스트 객체로 하위 태그를 감싸 데이터를 전달  [ 컴포넌트명.Provider ]

- value 속성을 통해 전달하려는 데이터를 지정하여 이를 통해 보낸 user와 setUser를 사용할 수 있다. {{오브젝트라서 중괄호 두개}}

 

3. 하위(자식) 컴포넌트에서 useContext훅 사용해 value 값 가져오기 

- useContext 훅 , UserContext 컴포넌트 import

import { useContext} from 'react' 
import { UserContext } from './UserContext';
const {user, setUser} = useContext(UserContext);

- UserContext.provider로 보낸 value값 (user, setUser)를 전체 애플리케이션에서 사용할 수 있다.

- useContext 훅을 사용해 userContext 값을 반환하여 비구조화 할당해준다.

 

📌 Context <-> Props 차이점

context props
함수, 변수, 객체 등 다양한 종류의 데이터를 저장할 수 있는 공간으로 React 컴포넌트 간에 전역 상태를 공유하는데 사용 주로 속성값을 전달하는데 사용
상위 -> 하위 컴포넌트로 데이터 간접적으로 전달가능
(중간 컴포넌트 건너뛸 수 있다)
상위 -> 하위 컴포넌트 데이터 직접 전달
(상호작용이 명확하고 직접적일때 사용)
전역 상태 관리에 유용, 애플리케이션 전체에서 공유되는 데이터에 대해 접근이 필요한 경우에 적합하다. 읽기 전용이기 때문에 상위 컴포넌트에서 전달받은 props를 하위에서 수정할 수 없다.
props drilling을 방지할 수 있다.
-> 코드 구조 단순화하고 관리하기 쉬운 전역상태 구현
중간에 있는 모든 컴포넌트를통해 데이터를 명시적으로 전달해야 되는 경우를 props drilling이라고 한다.

 

'FE > React' 카테고리의 다른 글

리액트로 에디터 생성하기 (CKEditor 라이브러리) + 부트스트랩 Tap  (0) 2023.05.09
리액트 구글 차트 사용법 (react google charts 라이브러리)  (0) 2023.05.08
리액트로 라우터 생성하기 (react-router-dom & qs 라이브러리)  (0) 2023.03.09
React - 카카오 API를 이용한 도서검색 (axios라이브러리, async, await)  (0) 2023.03.06
HTML의 DOM과 JavaScript의 관계 & React의 탄생  (0) 2023.03.05
'FE/React' 카테고리의 다른 글
  • 리액트로 에디터 생성하기 (CKEditor 라이브러리) + 부트스트랩 Tap
  • 리액트 구글 차트 사용법 (react google charts 라이브러리)
  • 리액트로 라우터 생성하기 (react-router-dom & qs 라이브러리)
  • React - 카카오 API를 이용한 도서검색 (axios라이브러리, async, await)
시녜's
시녜's
성장중인 새싹 개발자 🌱
  • 시녜's
    개발기록
    시녜's
  • 전체
    오늘
    어제
    • 분류 전체보기
      • FE
        • React
        • javascript(jQuery)
        • HTML & CSS
      • BE
        • Java [Servlet , Spring]
        • C & C++
        • Node.js
        • node.js
        • SQL (Oracle, mysql)
      • CS
        • 프로그래밍 이론(정보처리기사)
      • Etc
        • 코딩 챌린지
        • 개발 성장 일지
        • 코딩테스트
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링
    코딩기초
    프로그래밍
    자바문자열
    백준코딩테스트
    CharAt함수
    제이쿼리
    jsp
    백준
    자바기초
    코딩입문
    Java
    코딩테스트입문
    백준브론즈
    자바스크립트
    React
    자바배열
    코딩테스트
    jquery
    백준단계별문제
    javascript
    리액트
    html
    자바조건문
    mysql
    코테기초
    자바
    백준문제풀이
    코테
    자바반복문
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
시녜's
React Context API 사용법 및 Props와 Context차이점
상단으로

티스토리툴바