combineReducers 无法正常工作。任何人都可以看到问题吗?
Posted
技术标签:
【中文标题】combineReducers 无法正常工作。任何人都可以看到问题吗?【英文标题】:combineReducers not working properly. Can anyone see the problem? 【发布时间】:2021-04-10 07:43:54 【问题描述】:我的应用中有两个不同的减速器 => nodesReducer
和 controlsReducer
如果我一次将它们传递给商店一次,它们工作得非常好,但是每当我使用 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 的 combineReducers 和 TypeScript
Agora 云录制无法正常工作。正常启动和获取工作,但是我没有得到任何视频文件并查询和停止返回错误404
KSOAP 生成的 SOAP 请求不会导致任何错误但无法正常工作