combineReducers 无法正常工作。任何人都可以看到问题吗?

Posted

技术标签:

【中文标题】combineReducers 无法正常工作。任何人都可以看到问题吗?【英文标题】:combineReducers not working properly. Can anyone see the problem? 【发布时间】: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 【参考方案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中显示了,你能添加错误和解决方案吗?

以上是关于combineReducers 无法正常工作。任何人都可以看到问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 redux 中使用 applyMiddleWare

Redux 的 combineReducers 和 TypeScript

Agora 云录制无法正常工作。正常启动和获取工作,但是我没有得到任何视频文件并查询和停止返回错误404

KSOAP 生成的 SOAP 请求不会导致任何错误但无法正常工作

UIScrollView 无法正常工作(它返回顶部并且不显示任何滚动条

使用打字稿反应 redux combinereducer 时出错