28 lines
721 B
TypeScript
28 lines
721 B
TypeScript
import React, { createContext, useCallback, useContext, useMemo, useState } from 'react';
|
|
|
|
const ThemeContext = createContext({
|
|
isDarkMode: false,
|
|
toggleTheme: () => {},
|
|
});
|
|
|
|
export const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
|
|
const [isDarkMode, setIsDarkMode] = useState(false);
|
|
|
|
// useCallback garante que a função não mude nunca
|
|
const toggleTheme = useCallback(() => {
|
|
setIsDarkMode(prev => !prev);
|
|
}, []);
|
|
|
|
const value = useMemo(() => ({
|
|
isDarkMode,
|
|
toggleTheme
|
|
}), [isDarkMode, toggleTheme]);
|
|
|
|
return (
|
|
<ThemeContext.Provider value={value}>
|
|
{children}
|
|
</ThemeContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const useTheme = () => useContext(ThemeContext); |