reactjs - 调度一个动作没有到达它的根减速器
问题描述
这是我的根减速器的外观:
import {combineReducers} from 'redux'
const initialState = {
isAuthenticated: false,
user: {}
}
function test(state=initialState, action) {
switch(action.type) {
case 'TEST_DISPATCH' : return {
...state,
user: action.payload
}
default : return state;
}
}
const rootReducer = combineReducers({test})
export default rootReducer
用它创建商店后,我有:
function mapStateToProps(state) {
return {
test: state.test
}
}
接着:
const App = withRouter(connect(mapStateToProps, mapDispatchToProps)(Main))
在里面的某个地方Main
,我有一个动作创建者,叫做:
this.props.registerUser(some_payload)
。
它看起来像这样:
export function registerUser(userData) {
return {
type: 'TEST_DISPATCH',
payload: userData
}
}
当我调用它时,它会被调用,但从function test
上面的 Root Reducer 之后永远不会被调用。
这是我的mapDispatchProps
:
function mapDispatchToProps(dispatch) {
return bindActionCreators(actions, dispatch)
}
actions
是一个导入的文件,它看起来像这样:
export function registerUser(userData) {
return {
type: 'TEST_DISPATCH',
payload: userData
}
}
解决方案
使用创建商店时,请createStore()
确保您传递rootReducer
如下:
import { createStore, applyMiddleware } from 'redux';
import rootReducer from './reducers';
const store = createStore(
rootReducer
// ... applyMiddleware(someMiddleware)
);
export default store;
如果将 the 传递给likerootReducer
的第一个参数,reducer或任何其他 reducer 将永远不会被命中,因为它需要是一个直接返回下一个状态树的函数。createStore()
() => rootReducer
test
这是一个实际的例子。
希望这会有所帮助!
推荐阅读
- java - 当我使用 while 循环而不是如果我得到 TLE 错误
- android - 将数据从一个视图传递到另一个视图时出现颤振错误。错误类型“歌曲”不是“歌曲”类型的子类型
- c++ - 如何将图像放在按钮上?wxwidgets c++
- c# - 带有参数的 NSwagStudio 反射行为
- heroku - 从 .env 文件在 Heroku 中设置环境变量
- javascript - useEffect 在 useFrameApi onReady 事件中不起作用
- google-bigquery - 访问 BigQuery 上的公共数据集
- python - 如何在matplotlib中为多列绘制barplot 3D投影
- c# - 如何在 azure devops 上使用蛋糕构建系统发布两个测试结果集
- php - 多个复选框值到同一个sql列?