您是否曾經想開發一個具有多個主題的應用程序,但不知道如何去做?有很多方法
讓我們開始安裝我們需要的一切。為此,我們需要 SCSS 和 Redux:
yarn add sass yarn add @reduxjs/toolkit
只需執行此腳本即可安裝您需要的所有內容,並允許我們開始。
讓我們先建立一個 theme.scss 資料夾,它實際上不會保存我們的主題,而是保存所有 sass 變量,我們將其設定為 css 變數。
$bg1: var(--bg1); $bg2: var(--bg2); $bg3: var(--bg3); $bg4: var(--bg4); $ui1: var(--ui1); $ui2: var(--ui2); $ui3: var(--ui3); $ui4: var(--ui4); $h1: var(--h1); $h2: var(--h2); $p1: var(--p1); $p2: var(--p2); $border-rad: var(--border-rad); $border-clr: var(--border-clr); $font: var(--font);//etc...
這只是我的範例的一些起始變量,但這是前提。
現在,對於每個 .scss 文件,我們需要使用 @use "/path/to/theme";
包含此 theme.scss 文件
在這裡,我為 index.scss 創建了一些基本程式碼,以向所有元素添加簡單的基本樣式,例如框大小,並覆蓋大多數預設邊距/填充:
@use "theme"; //-------------------- html * { box-sizing: border-box; margin: none; padding: none; justify-content: center; align-items: center; flex-direction: column; font-family: theme.$font; }
現在讓我們從主題開始。首先,在名為主題的新目錄中建立一個檔案。之後您可以製作更多,但在本教程中我只會製作 2 個(深色和淺色)。您可以隨時擴展這些主題/想法,我完全鼓勵您進行實驗。
@import url('https://fonts.cdnfonts.com/css/br-segma'); .dark { --bg1: #202020; --bg2: #171717; --bg3: #131313; --bg4: #101010; --ui1: #252525; --ui2: #303030; --ui3: #353535; --ui4: #404040; --h1: #f5f5f5; --h2: #f0f0f0; --p1: #e0e0e0; --p2: #d5d5d5; --active: #671dc9; --active2: #1b1fec; --border-rad: 10px; --border-clr: #45454590; --font: "",sans-serif; --color-scheme: dark; }
@import url('https://fonts.cdnfonts.com/css/br-segma'); .light { --bg1: #f0f0f0; --bg2: #e5e5e5; --bg3: #e0e0e0; --bg4: #d5d5d5; --ui1: #e2e2e2; --ui2: #efefef; --ui3: #f2f2f2; --ui4: #f9f9f9; --h1: #070707; --h2: #101010; --p1: #131313; --p2: #171717; --active: #ae70ff; --active2: #797bff; --border-rad: 10px; --border-clr: #45454590; --font: "",sans-serif; --color-scheme: light; }
我將主題附加到我的index.scss 檔案中,該文件如下所示:
@use "theme"; @use "themes/dark"; @use "themes/light"; //-------------------- //etc...
讓我們開始設定我們的 redux 商店。
在專案目錄的 src 下,建立一個名為 store 的新資料夾,其中包含一個名為 slices 的子目錄。讓我們從 store 目錄中的 store.js 檔案開始。
import { configureStore } from '@reduxjs/toolkit' export const store=configureStore({ reducer:{ }, });
在開始之前,讓我們實際將我們的專案連接到 redux。這就是我的 main.jsx 檔案的樣子,你的應該看起來也類似:
import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App.jsx'; import "./index.scss"; import { store } from './store/store'; import { Provider } from 'react-redux'; createRoot(document.getElementById('root')) .render(<StrictMode> <Provider store={store}> <App /> </Provider> </StrictMode>,);
現在讓我們建立切片。在 slices 目錄中建立一個名為 themeSlice.js 的檔案。
import { createSlice } from '@reduxjs/toolkit' export const themeSlice=createSlice({ name: 'theme', initialState:"dark", reducers: { setTheme:(state,action)=>{ return action.payload; }, }, }) export const { setTheme }=themeSlice.actions; export default themeSlice.reducer;
從這裡,讓我們回到我們的商店並添加我們的主題切片作為減速器。
yarn add sass yarn add @reduxjs/toolkit
功能非常簡單。我們現在創建的是 2 個類,它們有自己的 css 變量,以及一個 redux 狀態來保存它。我們可以透過執行dispatch(setTheme(/*這裡的主題*/));
來調整我們的狀態
要應用我們的主題,我們可以使用效果將主體的 className 更改為我們的主題,並且為了防止錯誤,我們可以添加檢查以確保它是有效的主題而不是其他主題。
$bg1: var(--bg1); $bg2: var(--bg2); $bg3: var(--bg3); $bg4: var(--bg4); $ui1: var(--ui1); $ui2: var(--ui2); $ui3: var(--ui3); $ui4: var(--ui4); $h1: var(--h1); $h2: var(--h2); $p1: var(--p1); $p2: var(--p2); $border-rad: var(--border-rad); $border-clr: var(--border-clr); $font: var(--font);//etc...
感謝您的閱讀!
這是連結
以上是使用 SCSS 和 Redux 在 React 中建立主題系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!