0

我想从 迁移ReduxToolkitRematchJS

Store inReduxToolkit配置如下:

    import { combineReducers, configureStore } from '@reduxjs/toolkit';
import { TypedUseSelectorHook, useSelector } from 'react-redux';
import { authenticationReducer } from './system/auth';
import { themeUiReducer } from './ui/themeSlice';

export const rootReducer = combineReducers({
    data: combineReducers({

    }),
    system: combineReducers({
        auth : authenticationReducer
    }),
    ui: combineReducers({
        theme: themeUiReducer
    }),
});
export const store = configureStore({
    reducer: rootReducer,
    middleware: (getDefaultMiddleware) => [...getDefaultMiddleware()],
});

export type RootState = ReturnType<typeof store.getState>
export const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;

我的 ThemeSlice 看起来像这样:

import { createEntityAdapter, createSlice, PayloadAction } from "@reduxjs/toolkit";

export interface IThemes {
    darkMode: boolean | undefined,
}

const initialState: IThemes = {
    darkMode: false,
}

const themeSlice = createSlice({
    name: 'themeUI',
    initialState: initialState,
    reducers: {
        setDarkMode: (state, action: PayloadAction<boolean | undefined>) => {
            state.darkMode = action.payload;
        },
    },
    extraReducers: {

    }
})

export const { setDarkMode } = themeSlice.actions;
export const themeUiReducer = themeSlice.reducer;

我如何重写它RematchJS:这是我到目前为止所拥有的:

import { combineReducers } from '@reduxjs/toolkit';
import { TypedUseSelectorHook, useSelector } from 'react-redux';

import { init } from "@rematch/core";
import thunk from "redux-thunk";
import { themeUiReducer } from './ui/themeSlice';

export const rootReducer = combineReducers({
    ui: combineReducers({
        theme: themeUiReducer
    }),
});


export const store = init({
    redux: {
      reducers: {
        rootReducer
      },
      middlewares: [thunk],
    },
  });

export type RootState = ReturnType<typeof store.getState>
export const useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;

我想重用combineReducers但没有reduxToolkit导入。所以我可以像这样访问状态:

  const darkMode = useTypedSelector((state) => state.ui.theme.darkMode);

如果我如上所述使用我的商店,我总是会收到错误,即“从不”类型上不存在属性主题。

有人可以帮助我吗?

4

0 回答 0