[React] ์ปจํ ์คํธ API (Context API)
๐ ์ปจํ ์คํธ API
์ปจํ ์คํธ API๋ ์์ ์ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ ๋ฐ์ผ๋ก ๋ด๋ ค์ค์ผํ๋ ์ฝ๋๊ฐ ์์ ๋ ํน์ ๋ค๋ฅธ ๋ฉ๋ฆฌ ์๋ ์ปดํฌ๋ํธ์ ์๋ ๊ฐ์ ๋ฐ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค.
์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด props๋ก ์ผ์ผ์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ์ง ์์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์์ ์ปดํฌ๋ํธ๊ฐ ํ์ ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํด ์ค ์ ์์ต๋๋ค.
์ปจํ
์คํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ createContext
ํจ์๋ฅผ ํธ์ถํ๋ฉด ๊ฐ์ฒด๊ฐ ๋ฐํ๋๋ค.
// ์ปจํ
์คํธ ํจ์ ํธ์ถ
const UserContext = createContext("unknown");
// ์ปจํ
์คํธ ํจ์ ์ฌ์ฉ
const ContextExample = useContext(UserContext);
createContext
๋ฅผ ํธ์ถํ ๋ ์ด๊ธฐ๊ฐ์ ์ค์ ํ๋๋ฐ ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ ๊ฒ์ํ ๋ ํด๋น ๊ฐ์ด ์์ผ๋ฉด ์ด๊ธฐ๊ฐ์ด ์ฌ์ฉ๋๋ค.
๐ ์ฃผ์ํ ์
context๋ ๊ผญ ํ์ํ ๋๋ง ์ฌ์ฉํ๋ค.
- Context๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ ์ง ์ ์๋ค.
- Prop drilling์ ํผํ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ผ๋ฉด Component Composition (์ปดํฌ๋ํธ ํฉ์ฑ)์ ๋จผ์ ๊ณ ๋ คํ์.
๐ ์์
import React, { createContext, useContext, useState } from "react";
const MyContext = createContext("defalutValue");
function Child() {
const text = useContext(MyContext);
return <div>์๋
ํ์ธ์? {text} </div>;
}
function Parent() {
// ์ค๊ฐ ์ปดํฌ๋ํธ์ธ Parent์ ์๋ฌด๋ฐ props๋ ์ ๋ฌ๋์ง ์์๋ค.
return <Child />;
}
function GrandParent() {
return <Parent />;
}
function ContextSample() {
const [value, setValue] = useState(true);
return (
<MyContext.Provider value={value ? "Good" : "Bad"}>
<GrandParent />
<button onClick={() => setValue(!value)}>CLICK ME</button>
</MyContext.Provider>
);
}
export default ContextSample;
MyContext
์createContext
๋ก ๊ธฐ๋ณธ๊ฐ์ดdefalutValue
์ธ ์ปจํ ์คํธ๋ฅผ ์์ฑํ๋ค.Child
์ปดํฌ๋ํธ์text
์MyContext
๋ฅผ ์ ์ฉํ๋ค.- ๋ฉ์ธ ์ปดํฌ๋ํธ์ธ
ContextSample
์์text
๋ฅผ ๊ฐ์ ธ๋ค ์ธGrandParent
์ปดํฌ๋ํธ๋ฅผMyContext
ํ๊ทธ๋ก ๊ฐ์ธ ์ฌ์ฉํ๋ค. - ๊ธฐ๋ณธ๊ฐ์ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด
Provider
์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํดvalue
์ ๊ฐ์ ์ค์ ํ๋ค.
๊ฐ์ฒด ์์๋ Provider
์ปดํฌ๋ํธ๊ฐ ๋ค์ด์์ต๋๋ค.
Provider
์์ value
์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด Context
๊ฐ ์ ์ฉ๋ ๊ฐ์ด ๋ฐ๋๋๋ค.
Provider
์ปดํฌ๋ํธ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ํ์์ ์ปดํฌ๋ํธ๋ ๋ค์ ๋๋๋ง ๋ฉ๋๋ค.
์ค๊ฐ์ ์๋ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋์ง ์์๋ ํด๋น ์ปดํฌ๋ํธ๋ ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค.
์ถ์ฒ
-
ํจ์คํธ์บ ํผ์ค for velopert
๐ฌ ์ต์ ๋๊ธ