以前我用emotion的時候可以用theme provider做到主題與主題切換
但換公司後要用css module
不知道是不是我關鍵字下的不對,就是找不到一個好的方案
希望像emotion切換主題那樣,在app.tsx切換狀態,底下所有對應變數的內容就切換成該主題的css
您好,您可以使用React
的Context API
來實現在不同組件之間共享狀態的需求。
首先,在您的應用程式中創建一個Context
,例如ThemeContext
,並在其中定義您想要共享的狀態,例如主題。
例如:
import React from "react";
const ThemeContext = React.createContext({
theme: "light"
});
然後,您可以在您的應用程式的最頂層組件(例如App.tsx)中使用<ThemeContext.Provider>組件來提供這個Context。在<ThemeContext.Provider>中,您可以定義一個state來保存主題狀態,並提供一個函數來修改主題狀態。
例如:
import React, { useState } from "react";
const App: React.FC = () => {
const [theme, setTheme] = useState("light");
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{/* 其他組件 */}
</ThemeContext.Provider>
);
};
最後,在您的應用程式的其他組件中,您可以使用<ThemeContext.Consumer>組件來消費這個Context,並使用其中的狀態和函數來修改主題狀態。
例如:
import React from "react";
const OtherComponent: React.FC = () => {
return (
<ThemeContext.Consumer>
{({ theme, setTheme }) => {
return (
<button onClick={() => setTheme("dark")}>
切換主題: {theme}
</button>
);
}}
</ThemeContext.Consumer>
);
};
這樣,當您點擊切換主題按鈕時,主題狀態就會從 light 變為 dark ,並且所有對應變數的內容就切換成該主題的 css