Javascript 为什么所有redux reducer函数都在运行时执行?

Javascript 为什么所有redux reducer函数都在运行时执行?,javascript,reactjs,redux,Javascript,Reactjs,Redux,我试图通过React+Redux+thunk获得深入的知识 考虑一下,在这种情况下,我使用的是react-redux和redux-thunk 例如,我的应用程序中有两个减速器: 函数加载减速机(状态=false,操作){ console.log(“loadingReducer”); 开关(动作类型){ “装载”案例: 返回操作。加载 违约: 返回状态 } } 函数项还原器(状态=[],操作){ console.log('itemsReducer'); 开关(动作类型){ “项目”案例: 返回操

我试图通过React+Redux+thunk获得深入的知识

考虑一下,在这种情况下,我使用的是react-redux和redux-thunk

例如,我的应用程序中有两个减速器:

函数加载减速机(状态=false,操作){
console.log(“loadingReducer”);
开关(动作类型){
“装载”案例:
返回操作。加载
违约:
返回状态
}
}
函数项还原器(状态=[],操作){
console.log('itemsReducer');
开关(动作类型){
“项目”案例:
返回操作.data
违约:
返回状态
}

}
每次调度操作(即更改应用程序状态)时,都会调用所有还原程序

任何减速器都可以选择侦听任何操作,并根据需要更新其状态。当减速器连接到存储时,它们负责处理应用程序的一部分

这方面的一个用例是: 当您有购物车缩减器、购物页缩减器和购物页时

购物页面
发送一个操作,说明商品已添加到购物车。“reducer for shopping”页面将侦听此消息并更新项目状态,该状态用绿色表示它已添加到购物车中


负责购物车图标的
cart reducer
也会收到此消息并更新计数

所有控制台日志运行的原因是因为
组合减速机的工作方式…这基本上是通过每个减速机的代码。但是,由于它驻留在switch语句中,所以大部分都不会执行。所以这不会产生性能问题

如果您说的是应用程序启动时的多个日志,那是因为redux在应用程序启动时调度2-3个操作(如上所述,这将导致所有日志运行。您可以使用
console.log(action)
将操作本身记录在其中一个还原器中来检查它们


一般来说,如果减缩器中的switch语句之外没有太多代码,那么就没问题了。无论如何,这是可行的,因为使用redux thunk,大部分代码都应该放在操作中,而减缩器只是更改状态。

你是如何连接的?@Alex-减缩器只在操作启动后启动。看看你的c组件和操作的使用位置。此外,使用redux开发工具将帮助您反思操作和整个流程。