这是我收到的错误无法读取属性'数据'未定义的
switch (action.type){
case REGISTER_USER:
console.log("Action ", action);// This prints {type: "REGISTER_USER", payload: undefined}
return [action.payload.data, ...state];
}
return state;
我认为这种情况正在发生,因为Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
是承诺的当前状态。
这是我的行动
function registerUser(details, callback) {
console.log(details);
const request = axios.post(URL, {
"email": details['email'],
"name": details['username'],
"password": details['password']
}).then(() =>callback());
console.log(request);
return{
type: REGISTER_USER,
payload: request
};
}
传递的回调如下所示
onFormSubmit(values){
this.props.registerUser(values
,() =>{
this.props.history.push("/login");
}
);
}
我的问题是,只有在Promise解决后,我才能返回行动?在必要的时候,我是一个反应正确的人。
答案 0 :(得分:0)
您的操作无效。
当您的操作包含异步过程时,您必须遵循此逻辑
function asyncStart(){
return { type:'ASYNC_REQUEST' };
}
function asyncError(e){
return {type:'ASYNC_ERROR', payload:{error:e}};
}
function asyncSuccess(res){
return {type:'ASYNC_SUCCESS',payload:{result:res}};
}
function asyncMethod(){
return (dispatch, getState)=>{
let state = getState(); /// if you require state
dispatch(asyncStart());// or use {type:'Something',payload:....};
anAsyncSomething.then((val)=>{
dispatch(asyncSuccess(val));
})
.catch((e)=>{
dispatch(asyncError(e));
});
}
}
我希望这有助于理解redux如何处理异步操作。