我正在try 为不同的react 成分创建单独的减速器.代码是这样的:

Store.tsx:

const store = createStore(rootReducer, composeWithDevTools());

Root.Reducers.tsx:

import { combineReducers } from 'redux';
import mainReducer from './main.reducers';
import profileReducers from './components/Profile/Profile.reducers';

const rootReducer = combineReducers({
    mainReducer,
    profileReducers,
});

export default rootReducer;

Main.Reducers.tsx:

<...>
function mainReducer(state = initialState, action: AnyAction) {
    switch (action.type) {
        case HOME_PAGE_MOVIES_ADDED:
            return {
                ...state,
                homePageMovies: action.homePageMovies,
            };
        case MOVIE_SELECTED:
            return {
                ...state,
                selectedMovie: action.selectedMovie,
            };

        default:
            return state;

export default mainReducer;
export type RootState = ReturnType<typeof mainReducer>;

Profile.Reducers.tsx:


interface mainState {
    selectedCategory: boolean;
}

const initialState: mainState = {
    selectedCategory: false,
};

function profileReducers(state = initialState, action: AnyAction) {
    switch (action.type) {
        case CATEGORY_SELECTED:
            return {
                ...state,
                selectedCategory: action.selectedCategory,
            };
        default:
            return state;
    }
}

export default profileReducers;
export type RootState = ReturnType<typeof profileReducers>;

When I try to render UI, I get following error: enter image description here

enter image description here

一旦我在*/store.tsx&gt;const store = createStore(mainReducer, composeWithDevTools());rootReducer替换mainReducer,我就会得到这个错误.

我遗漏了什么?谢谢!

推荐答案

在使用combineReducers函数创建/合并/扩展Reduxstore 的状态树之前,您似乎只有一个减速器.

const store = createStore(mainReducer, composeWithDevTools());

因此,mainReducer处理101你的应用程序的状态.

const favoriteMoviesAll = useSelector(
  (state: RootState) => state.homePageMovies
);

当您开始展开状态树时,您现在是在特定键下嵌套减速器.

const rootReducer = combineReducers({
  mainReducer,
  profileReducers,
});

const store = createStore(rootReducer, composeWithDevTools());

现在,根state是一个具有mainReducerprofileReducers属性的对象.state.homePageMovies是未定义的.

const favoriteMoviesAll = useSelector(
  (state: RootState) => state.homePageMovies // undefined
);

现在favoriteMoviesAll也是未定义的,不能访问任何slice方法.

const favoriteMovies = favoriteMoviesAll.slice(0, 19); // throws error!

以前是state.homePageMovies的相同状态现在嵌套在state.mainReducer.homePageMovies中更深的位置.

const favoriteMoviesAll = useSelector(
  (state: RootState) => state.mainReducer.homePageMovies
);

因为这是react-redux的工作方式,并且Reducer函数的命名约定是<state-area>Reducer,所以通常将传递给combineReducers的Reducer重命名,以便为它们提供在状态树中有意义的更易读的名称.

示例:

const rootReducer = combineReducers({
  movies: mainReducer,
  profile: profileReducers,
});

...

const favoriteMoviesAll = useSelector(
  (state: RootState) => state.movies.homePageMovies
);

Javascript相关问答推荐

使用redux-toolet DelivercThunks刷新访问令牌

为什么从liveWire info js代码传递数组我出现错误?

如何访问Json返回的ASP.NET Core 6中的导航图像属性

我在这个黑暗模式按钮上做错了什么?

按钮未放置在html dis位置

react/redux中的formData在expressjs中返回未定义的req.params.id

如何将Openjphjs与next.js一起使用?

PDF工具包阿拉伯字体的反转数字

在Java中寻找三次Bezier曲线上的点及其Angular

为什么我的自定义元素没有被垃圾回收?

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

Phaserjs-创建带有层纹理的精灵层以自定义外观

Node.js错误: node 不可单击或不是元素

postman 预请求中的hmac/sha256内标识-从js示例转换

如果NetSuite中为空,则限制筛选

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

JavaScript:多个图像错误处理程序

如果我将高度设置为其内容的100%,则在Java脚本中拖动以调整面板大小时会冻结

错误400:当我试图在React中使用put方法时,该字段是必需的