OZ

[React] Context API

iun 2025. 1. 10. 13:59

Context API?

React에서 제공하는 Hook 중 하나로, 전역적으로 사용할 데이터를 관리하는 메커니즘이다

덕분에 단계마다 일일이 props를 넘겨주지 않고도 컴포넌트 트리 전체에 데이터를 제공할 수 있다

 

 

 

사용방법

createContext 전역 상태 만들기 

전역 상태를 만들기 전 전역 상태들을 모아 둘 폴더를 따로 만들어두는 걸 권장한다

전역 상태 저장소인만큼 여기저기 사용해야하는데

특정 컴포넌트 안에 넣어 만들어두는 것보다 따로 두는 게 더 효율이 좋기 때문이다

// 상태저장소 만들기
// src/context/counterContext.jsx
const counterContext = createContext()

 

 

Provider 전역 상태 연결 

// 연결하기
// src/context/counterContext.jsx
export function CounterProvider({children}) {
    const [counter, setCounter] = useState(0)
    return (
        <counterContext.Provider value={ [counter, setCounter] }>
            {children}
        </<counterContext.Provider>
    )
}

위에서 만든 전역상태저장소를 가져와 Provider를 꺼내 연결시켜준다

여기서 value속성에 값을 입력하면 counterContext의 상태값으로 선언되면서

전역 어디에서든 꺼내 사용할 수 있게 되는 값이 된다

 

const [counter, setCounter] = useState(0)

value={ [counter, setCounter] }

위 코드에서 useState로 만든 값 [counter, setCounter] 를 value 값에 넣어둔 상태다

그럼 [counter, setCounter] 는 이제 어느 컴포넌트에서든 꺼내 사용할 수 있게 되는 거다

 

{children}

이제 특정 위치에다가 사용하려면

<counterContext.Provider>의 자식으로 넣어야하기 때문에

{children}을 내려받은 후 자식으로 넣어준다

// main.jsx
<CounterProvider>
    <App />
</CounterProvider>

이제 마지막으로

모든 컴포넌트를 담고 있는 App을 위에서 만든 <CounterProvider>함수로 감싸주면 끝이다

여기서 App이 CounterProvider의 children 으로 내려받게 되는거다

 

useContext 전역 상태 가져오기 

// 가져오기
// src/context/counterContext.jsx
export function useConunter() {
    return useContext(counterContext)
}

// 컴포넌트
import { useConuter } from "./context/counterContext"

const [counter, setCounter] = useConuter()

전역상태저장소를 어디서든 호출할 수 있게

useContext를 useConuter 함수로 한 번 묶어서 리턴값을 받을 수 있게 한다

 

그러면 컴포넌트 어디에서든 useCounter의 배열값을 쉽게 가져올 수 있게 된다

const [counter, setConuter] = useConter()

그래서 받아온 값을 변수에 담아서 사용하면 끝이다

'OZ' 카테고리의 다른 글

[React] 최적화  (0) 2025.01.12
[Raect] Redux  (0) 2025.01.11
[React] Props Drilling  (0) 2025.01.09
[React] 스타일링 TailwindCSS  (0) 2025.01.06
[React] 스타일링 Styled-Components  (0) 2025.01.04