์ค๋์ Context API
๊ฐ ๋ฌด์์ธ์ง ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ฐ๋จํ ์ ๋ฆฌํด๋ณผ๊ฒ์!
์ ์ญ์ ์ธ ๋ฐ์ดํฐ ๊ณต์ ๋ฅผ ์ํ ๋ฐฉ๋ฒ
๋ก๊ทธ์ธ ๋๋ ์น ์ฌ์ดํธ ๋ด ์ฌ์ฉ์ ์ค์ (ํ ๋ง๋ ์ธ์ด๋ฑ)์ ์ฌ์ฉ
redux
,react-router
,styled-components
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋Context API
๊ธฐ๋ฐ ๊ตฌํ
Context API
๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ์ ์ฌ์ฌ์ฉ์ด ์ด๋ ค์์ผ๋ก ๋ฐ๋์ ํ์ํ ๋์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ปดํฌ๋ํธ๋ props
๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋๋ฐ์. props
๋ฅผ ์ ๋ฌํด์ผํ ์ปดํฌ๋ํธ๊ฐ ๋ง์์ง๋ฉด ์ด ๊ณผ์ ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ง๋ณด์๊ฐ ๋ฎ์์ง ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ redux
์ mobx
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ํ๊ด๋ฆฌ๋ฅผ ํ๋๋ฐ์! ContextAPI
๋ฅผ ์ฌ์ฉํ์ฌ๋ ๊ธ๋ก๋ฒํ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
Context API
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ 3๊ฐ์ง ์ฃผ์ ๊ฐ๋
๋ถํฐ ์ ๋ฆฌํด๋ณผ๊ป์!
context
๊ฐ์ฒด ์์ฑ์ ์ฌ์ฉํ๋ ํจ์createContext
ํจ์ ํธ์ถ์ Provider
์ Consumer
์ปดํฌ๋ํธ ๋ฐํdefaultValue
๋ ์ด๊ธฐ๊ฐ ์๋ฏธ(Provider๋ฅผ ์ฌ์ฉํ์ง ์์ ๋ ์ ๋ฌ๋ ๊ฐ)context
์ value
๋ฅผ ๋ณ๊ฒฝํ๋ ์ญํ Provider
๋ฅผ ์ฌ์ฉํ ๋์๋ ๐value
๐๋ช
์ ํ์context
๋ณํ๋ฅผ ๊ตฌ๋
ํ๋ ์ปดํฌ๋ํธcontext API
์ฌ์ฉ ์์ ๋ ์๋ ์ฌ์ดํธ๋ฅผ ๋ณด๊ณ ํ์์ต๋๋ค.
๋ฒํผ์ ์์์ ๊ฐ์ง๊ณ ์๋ context๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋ฒํผ์ ์์์ ๋ถ๋ฌ์์ ์ฌ์ฉํด๋ณด๋๋ก ํ ๊ฒ์!
๋จผ์ , context๋ฅผ ๋ง๋ค์ด์ค๊บผ์์!
import { createContext } from "react";
// createContext()๋ฅผ ์ฌ์ฉํ์ฌ ColorContext ์์ฑ. ์ด๊ธฐ๊ฐ์ skyblue์ค์
const ColorContext = createContext({ color: "skyblue" });
export default ColorContext;
๊ทธ๋ฆฌ๊ณ ๋ง๋ค์ด์คColorContext
๋ฅผ ์ฌ์ฉํ button
์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
Consumer
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ ์ฉํ ๊ฐ์ ๋ถ๋ฌ์ฌ ์ ์๋๋ฐ์!
import React from "react";
import ColorContext from "../contexts/color";
const ColorButton = () => {
return (
<ColorContext.Consumer>
{(value) => (
<button
style={{
width: "150px",
height: "50px",
background: value.color
}}
>
Button!
</button>
)}
</ColorContext.Consumer>
);
};
export default ColorButton;
์๋์ฒ๋ผ ColorContext
์์ ์ค์ ํด์ค color
๊ฐ์ ๊ฐ์ ธ์ ๋ฒํผ์ ๋ฐฐ๊ฒฝ์์ผ๋ก ์ ์ฉํด์ค ์ ์์ต๋๋ค.
์ด๋ฒ์๋ Provider
๋ฅผ ์ฌ์ฉํ์ฌ value
๋ฅผ ๋ณ๊ฒฝํด ์ฃผ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
export default function App() {
return (
<ColorContext.Provider value={{color:"orange"}}>
<div>
<h2>Context API ์ฌ์ฉํด๋ณด๊ธฐ!</h2>
<ColorButton />
</div>
</ColorContext.Provider>
);
}