【问题标题】:combineReducers not working properly. Can anyone see the problem?combineReducers 无法正常工作。任何人都可以看到问题吗?
【发布时间】:2021-04-10 07:43:54
【问题描述】:

我的应用中有两个不同的减速器 => nodesReducercontrolsReducer

如果我一次将它们传递给商店一次,它们工作得非常好,但是每当我使用 combineReducers 时,它们就会停止工作 => 因为我从状态中提取的所有内容在我的组件中都变为 undefined,但一切看起来仍然正常在工具包扩展中。

这是代码。

这完全没问题(直接放一个减速器):

import { configureStore } from "@reduxjs/toolkit";

import nodesReducer from "./Node";

const store = configureStore({
  reducer: nodesReducer,
  middleware: [],
});

export default store;

当我用 combineReducers 添加一个减速器时,这个不起作用:

import { configureStore } from "@reduxjs/toolkit";
import { combineReducers } from "redux";

import nodesReducer from "./Node";
import controlsReducer from "./Controls";

const rootReducer = combineReducers({
  nodesReducer,
  controlsReducer,
});

const store = configureStore({
  reducer: rootReducer,
  middleware: [],
});

export default store;

谁能看出发生了什么问题?

【问题讨论】:

  • 你遇到了什么错误?
  • @Nick 当我使用 combineReducers 时,我使用 useSelector 从状态中获得的所有内容都变得未定义,因此应用程序崩溃。
  • 请做一个可重现的例子How to create a Minimal, Reproducible Example,也许是你如何实现reducer的问题?也许它是关于你如何使用useSelector

标签: javascript html reactjs redux react-redux


【解决方案1】:

添加 rootReducer 后,您应该更改您的 useSelectors

useSelector(state => state.someData)

useSelector(state => state.nodesReducer.someData)
useSelector(state => state.controlsReducer.someData)

【讨论】:

    【解决方案2】:

    这里有点有根据的猜测,但您提供的内容似乎没有明显错误,所以鉴于您更改了减速器代码,我想这是因为通过组合减速器,您的状态将从:

    {
       ...stuffFromNodesReducer
    }
    

    进入

    {
        nodesReducer: ...stuffFromNodesReducer,
        controlsReducer: ...stuffFromControlsReducer
    }
    

    您应该能够使用 redux devtools 检查您的 redux 状态,以检查它的外观。

    【讨论】:

    • 这个错误是因为从useSelector导入时出错
    • 我不认为你在代码sn-p中显示了,你能添加错误和解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2018-11-16
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多