| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- liststyleimage
- ํด๋์ค์ ๋ ํฐ
- borderstyle
- ๊ทธ๋ฃน์ ๋ ํฐ
- ํผํ๊ทธ
- ๋ชจ๋์นํฐํธ
- texttransform
- CDN
- inlineblock
- textshadow
- formtag
- ๊ตฌ๊ธํฐํธ
- ์์ด๋์ ๋ ํฐ
- ํฐํธ์จ์ดํธ
- borderspacing
- liststyleposition
- ์ ๋๋ฒ์ ์ ๋ ํฐ
- ์ฃผ์
- wordspacing
- ์ถ์ฝ
- ํ์ ์ ๋ ํฐ
- bordercollapse
- fontweight
- textdecoration
- ํฅ์ค์ฝ๋
- captionside
- ๋นํ๊ทธ
- gtammertable
- selectorslevel4
- liststyletype
- Today
- Total
็ก์
Context API (์ฝํ ์คํธ ์์ดํผ์์ด) ๋ณธ๋ฌธ
๐ก Context API
์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ญ์ผ๋ก ๊ณต์ ํ ์ ์๋๋ก ํด์ฃผ๋ React์ ๋ด์ฅ ๊ธฐ๋ฅ.
โผ๏ธ Props Drilling์ ๋ฌธ์ ์
๊ธฐ๋ณธ์ ์ผ๋ก React๋ ๋ถ๋ชจ์์ ์์์ผ๋ก props๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ์ง๋ง, ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๊น์ด์ง์๋ก ๋ถํ์ํ๊ฒ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ค๊ฐ ์ปดํฌ๋ํธ๊น์ง props๋ฅผ ๊ณ์ ์ ๋ฌํ๋ ํ์์ Props Drilling์ด๋ผ๊ณ ํ๋ค.
Context API๋ ์ด๋ฌํ Props Drilling ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
<App user={user}> (๋ฐ์ดํฐ ์์ )
↓ Props ์ ๋ฌ
<Parent user={user}> (๋ฐ์ดํฐ ์ ๋ฌ)
↓ Props ์ ๋ฌ
<Child user={user}> (๋ฐ์ดํฐ ์ ๋ฌ)
↓ Props ์ ๋ฌ
<GrandChild user={user}> (๋ฐ์ดํฐ ์ฌ์ฉ)
- ์ฝ๋ ๋ณต์ก์ฑ
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ๋ถํ์ํ props๊ฐ ๊ณ์ ์ถ๊ฐ๋๋ค.
- ์ ์ง๋ณด์ ์ด๋ ค์
- props ์ด๋ฆ์ด๋ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ค๊ฐ ์ปดํฌ๋ํธ๋ ํจ๊ป ์์ ํด์ผ ํ๋ค.
- ์ฌ์ฌ์ฉ์ฑ ์ ํด
- ๋ฐ์ดํฐ ์ ๋ฌ์ ์ํ ๊ตฌ์กฐ๊ฐ ๊ณ ์ ๋์ด ์ปดํฌ๋ํธ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ด๋ ค์์ง ์ ์๋ค.
โผ๏ธ ์ฃผ์ ์ปดํฌ๋ํธ
๐น createContext()
Context ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
import { createContext } from "react";
const ThemeContext = createContext();
๐น Provider
Context ๋ฐ์ดํฐ๋ฅผ Provider ๋ด๋ถ์ ๋ชจ๋ ํ์ ์ปดํฌ๋ํธ์ ์ ๋ฌํ๋ค.
<ThemeContext.Provider value={theme}>
<App />
</ThemeContext.Provider>
- value ์์ฑ์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ํ์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๋ค.
๐น useContext()
Provider๊ฐ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ Hook์ด๋ค.
import { useContext } from "react";
const theme = useContext(ThemeContext);
โผ๏ธ ์ฌ์ฉ ์์
1๏ธโฃ Context ์์ฑ
// src/contexts/ThemeContext.js
import React from 'react';
// ThemeContext๋ผ๋ Context ๊ฐ์ฒด ์์ฑ
const ThemeContext = React.createContext('light'); // ๊ธฐ๋ณธ๊ฐ 'light'
export default ThemeContext;
2๏ธโฃ Provider๋ก ๋ฐ์ดํฐ ์ ๋ฌ
// App.js ๋๋ ์ต์์ ์ปดํฌ๋ํธ
import React, { useState } from 'react';
import ThemeContext from './contexts/ThemeContext'; // ์์ฑํ Context ์ํฌํธ
import MyComponent from './MyComponent';
function App() {
const [theme, setTheme] = useState('light'); // ํ
๋ง ์ํ ๊ด๋ฆฌ
const toggleTheme = () => {
setTheme(currentTheme => (currentTheme === 'light' ? 'dark' : 'light'));
};
return (
// ThemeContext.Provider๋ก ํ์ ์ปดํฌ๋ํธ๋ค์๊ฒ 'theme' ๊ฐ์ ์ ๊ณต
<ThemeContext.Provider value={{ theme, toggleTheme }}>
<button onClick={toggleTheme}>ํ
๋ง ์ ํ</button>
<MyComponent /> {/* ํ์ ์ปดํฌ๋ํธ */}
</ThemeContext.Provider>
);
}
export default App;
3๏ธโฃ useContext๋ก ๋ฐ์ดํฐ ์ฌ์ฉ
// MyComponent.js (ํ์ ์ปดํฌ๋ํธ)
import React, { useContext } from 'react';
import ThemeContext from './contexts/ThemeContext'; // Context ์ํฌํธ
function MyComponent() {
// useContext ํ
์ ์ฌ์ฉํ์ฌ ThemeContext์ ๊ฐ(theme, toggleTheme)์ ๊ฐ์ ธ์ด
const { theme, toggleTheme } = useContext(ThemeContext);
return (
<div style={{ background: theme === 'dark' ? '#333' : '#eee', color: theme === 'dark' ? 'white' : 'black' }}>
<h1>ํ์ฌ ํ
๋ง: {theme}</h1>
<p>Context API๋ฅผ ํตํด ํ
๋ง ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ต๋๋ค.</p>
<button onClick={toggleTheme}>ํ์ ์ปดํฌ๋ํธ์์ ํ
๋ง ์ ํ</button>
</div>
);
}
export default MyComponent;
โผ๏ธ ํ์ฉ ์ฌ๋ก
- ํ ๋ง(Theme): ๋คํฌ ๋ชจ๋, ๋ผ์ดํธ ๋ชจ๋ ๋ฑ ์ฑ ์ ์ฒด ํ ๋ง ๊ด๋ฆฌ.
- ์ฌ์ฉ์(User): ๋ก๊ทธ์ธ ์ฌ๋ถ, ์ฌ์ฉ์ ์ ๋ณด, ํ ํฐ ๊ด๋ฆฌ.
- ์ธ์ด(Language): ๋ค๊ตญ์ด ์ง์์ ์ํ ์ธ์ด ๊ด๋ฆฌ.
- ๊ณตํต ์ค์ (Settings): ์ฑ ์ ์ฒด์์ ์ฌ์ฉํ๋ ์ค์ ๊ฐ ๊ด๋ฆฌ.
๐ POINT ๐
โ๏ธ Context API๋ ์ ์ญ์ผ๋ก ๊ณต์ ํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค. โ๏ธ
โ๏ธ ๋ชจ๋ ์ํ๋ฅผ Context๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์๋๋ค. โ๏ธ
โ๏ธ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ํ๊ฐ ๋ง๋ค๋ฉด ๋ถํ์ํ ๋ ๋๋ง์ด ๋ฐ์ํ ์ ์๋ค. โ๏ธ
โ๏ธ ๋ณต์กํ ์ ์ญ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค๋ฉด Redux, Zustand ๋ฑ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํจ๊ป ๊ณ ๋ คํ ์ ์๋ค. โ๏ธ
'<React>' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| useReducer (์ ์ฆ๋ฆฌ๋์) (0) | 2026.07.15 |
|---|---|
| Styled component (์คํ์ผ๋ ์ปดํฌ๋ํธ) (0) | 2026.07.15 |
| React Router (react-router-dom) (0) | 2026.07.14 |
| React์์ map ํจ์ ์ฌ์ฉํ๊ธฐ (0) | 2026.07.14 |
| Hash URL (0) | 2026.07.14 |
