React, Context - 복수 사용하기
2024. 12. 26. 14:44ㆍ카테고리 없음
App.js
import React from "react";
import { UserProvider } from "./UserContext";
import { ThemeProvider } from "./ThemeContext";
import MainComponent from "./MainComponent";
// App 컴포넌트
// 여러 Context Provider를 중첩하여 사용
const App = () => {
return (
<UserProvider>
<ThemeProvider>
<MainComponent />
</ThemeProvider>
</UserProvider>
);
};
export default App;
UserContext.js
import React, { createContext, useState } from "react";
// 사용자 정보 관리를 위한 Context
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
const [user, setUser] = useState({ name: "홍길동", age: 25 });
return (
<UserContext.Provider value={{ user, setUser }}>
{children}
</UserContext.Provider>
);
};
ThemeContext.js
import React, { createContext, useState } from "react";
// 테마 정보 관리를 위한 Context
export const ThemeContext = createContext();
export const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState("light");
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{children}
</ThemeContext.Provider>
);
};
MainComponent.js
// MainComponent.js
import React, { useContext } from "react";
import { UserContext } from "./UserContext";
import { ThemeContext } from "./ThemeContext";
const MainComponent = () => {
const { user, setUser } = useContext(UserContext); // UserContext 사용
const { theme, setTheme } = useContext(ThemeContext); // ThemeContext 사용
return (
<div style={{
background: theme === "light" ? "#fff" : "#333",
color: theme === "light" ? "#000" : "#fff",
}}
>
<h1>안녕하세요, {user.name}님!</h1>
<p>현재 나이: {user.age}</p>
<button onClick={() => setUser({ name: "김영희", age: 30 })}>
사용자 변경
</button>
<br />
<button onClick={() => setTheme(theme === "light" ? "dark" : "light")}>
테마 변경 (현재: {theme})
</button>
</div>
);
};
export default MainComponent;
https://stackblitz.com/edit/vitejs-vite-gvlujeh8?embed=1&file=src%2FApp.jsx