gpt4 book ai didi

javascript - Redux Thunk 中间件不工作

转载 作者:行者123 更新时间:2023-11-28 18:03:37 25 4
gpt4 key购买 nike

我正在使用 Redux 实现基本登录。当我创建商店时,我执行了以下操作:

const store = createStore(
reducers,
applyMiddleware(thunk)
);

然后在我的操作中,我映射到 props 登录处理程序...

const mapDispatchToProps = (dispatch, ownProps) => {
return {
loginRoute: (username,password) => {
dispatch(loginRoute(username,password));
},
dispatch
}
};

然后在提交时调度该操作...

this.props.loginRoute(username.value,password.value); 

登录路由功能看起来像这样......

export function loginRoute(username, password){
return axios({
method: 'post',
url: '/login',
data: {
'username': username,
'password': password
}
}).then((response)=>{
if(response.data === "no username in database"){
// send action to update state, no username in database
return{
type: "ERROR",
response
};
}else if(response.data ==="incorrect password"){
return{
type: "ERROR",
response
};
}else{
return{
type: 'LOGIN',
data:response
};
}
}).catch((error)=>{

return{
type: "ERROR",
response: error
};
});
}

但是,有了这一切,我收到错误“操作必须是普通对象”。使用自定义中间件进行异步操作。

有什么想法可以解释为什么吗?我正在使用 thunk 中间件,逻辑似乎是正确的。

最佳答案

您需要从 Action 创建者返回一个函数:

export function loginRoute(username, password) {
return function(dispatch, getState) {
axios({...}).then((response) => {
...
dispatch({type: 'LOGIN', data: response})
}
}
}

您可以使用简写语法:

export const loginRoute = (username, password) => (dispatch, getState) => {
...
}

或者,您可以使用另一个中间件,它应该可以像上面那样实现,https://github.com/acdlite/redux-promise

关于javascript - Redux Thunk 中间件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43111382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com