React

时间:2017-11-10 22:37:33

标签: javascript reactjs promise react-redux

这是我收到的错误无法读取属性'数据'未定义的

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解决后,我才能返回行动?在必要的时候,我是一个反应正确的人。

1 个答案:

答案 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如何处理异步操作。