javascript 如何在Redux状态下保持黑暗模式

vuv7lop3  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(150)

我用Redux-Toolkit(RTK)Query写了一个主题转换器,但是我找不到一种方法让页面保持刷新前的主题。
代码如下:

  1. import { createSlice } from "@reduxjs/toolkit";
  2. export const themeSlice = createSlice({
  3. name: "themeSlice",
  4. initialState: true, // Initial value is light theme
  5. reducers: {
  6. toggleTheme: (state) =>{
  7. return state = !state; // Changes the theme to dark
  8. }
  9. }
  10. });
  11. export const { toggleTheme } = themeSlice.actions
  12. export default themeSlice.reducer;

字符串
Redux商店:

  1. import { configureStore } from "@reduxjs/toolkit";
  2. export const store = configureStore({
  3. reducer: {
  4. theme: themeReducer,
  5. },
  6. })


我个人想在localStorage中保存主题名,我试了几个教程,但都不起作用。

gopyfrb3

gopyfrb31#

一个简单的解决方案是从localStorage本地设置初始状态值,并将状态更改持久化到localStorage。
范例:

  1. // Read initial state value from localStorage or provide
  2. // default fallback value
  3. const initialState = JSON.parse(localStorage.getItem("theme")) ?? true;
  4. export const themeSlice = createSlice({
  5. name: "themeSlice",
  6. initialState,
  7. reducers: {
  8. toggleTheme: (state) => {
  9. // Compute the next state
  10. const nextState = !state;
  11. // Persist the next state value
  12. localStorage.setItem("theme", JSON.stringify(nextState));
  13. // Return the next state value
  14. return nextState;
  15. }
  16. }
  17. });

字符串
x1c 0d1x的数据
Reducer函数应该是纯函数,例如没有副作用,所以上面的解决方案可能会令人皱眉。Redux-Persist是一个常见的和流行的库解决方案,用于持久化和水合Redux存储。如果你已经相当熟悉Redux,那么它大约是5-15分钟的集成。
基本示例:

  1. import { configureStore, combineReducers } from "@reduxjs/toolkit";
  2. import { persistStore, persistReducer } from "redux-persist";
  3. import storage from "redux-persist/lib/storage";
  4. const persistConfig = {
  5. key: 'root',
  6. storage,
  7. };
  8. const rootReducer = combineReducers({
  9. theme: themeReducer,
  10. });
  11. const persistedReducer = persistReducer(persistConfig, rootReducer)
  12. export const store = configureStore({
  13. reducer: persistedReducer,
  14. });
  15. export const persistor = persistStore(store);
  1. import { Provider } from "react-redux";
  2. import { PersistGate } from "redux-persist/integration/react";
  3. import { store, persistor } from "../path/to/store";
  4. ...
  5. <Provider store={store}>
  6. <PersistGate loading={null} persistor={persistor}>
  7. <App />
  8. </PersistGate>
  9. </Provider>

的数据


展开查看全部

相关问题