React에서 App > A > B > C > D
순서로 컴포넌트 자식이 형성되어있다 생각했을 때, App 컴포넌트에서 props를 받아 D 컴포넌트에서 사용을 해야할 경우 사이에 있는 A, B, C 컴포넌트는 전달자로서의 역할만 하게 된다.
*props가 계속 전달되는 구조를 props dealing이라 한다.
App 컴포넌트에서 바로 D 컴포넌트로 데이터 전달을 할 수 있게 React에서는 Context API를 활용한다.
App 컴포넌트에서 Context를 생성하면 App 컴포넌트의 하위 컴포넌트들에게 App 컴포넌트 접근 권한이 주어진다.
새로운 파일을 생성하여 import createContext
*createContext : Context를 생성하게 해주는 함수
import React, {createContext} from "react";
export createContext()
함수 호출
export const UserContext = createContext(/* defaultValue */);
컴포넌트 생성 후 태그명이 export 했던 변수명 + .Provider
return
export default function UserStore(props) {
const user = 'FE-developer';
return (
<UserContext.Provider value={user}>{ props.children }</UserContext.Provider>
);
}
부모 컴포넌트에서 Context file 3번 에 만들어 놓은 UserStore
컴포넌트 import
import UserStore from './store/user';
Context 접근 권한을 주려는 컴포넌트를 import한 컴포넌트 태그로 감쌈
value 값이 변할 때 마다 모든 하위 컴포넌트는 리렌더링됨
export default function App() {
return (
<UserStore>
<ChildrenCompnt1 />
<ChildrenCompnt2 />
</UserStore>
);
}
useContext
import React, { useContext } from 'react';
Context file 2번에 export한 UserContext
import
import { UserContext } from './store/user';
useContext()
의 초기값으로 UserContext
를 넣어 데이터 값을 가져옴
export default function ChildrenCompnt1() {
const value = useContext(UserContext);
console.log(value); // 'FE-developer'
return (
<div>Children Component 01</div>
);
}