使用mapDispatchToProps时,承诺不返回

时间:2017-01-07 17:45:26

标签: javascript reactjs promise redux react-redux

最近,我已经从使用一个乐观操作过渡到另外两个以检测成功/失败服务器响应。

通过乐观的方法,我能够以简约的方式传递我的行动并从承诺链中传递出来:

B = A((cols - 1) * size(A, 1) + (1:numel(cols)).');
%   3
%   9   

现在我正在调度多个操作并使用class Post extends Component { onUpdateClick(props) { this.props.updatePost(this.props.params.id, props) .then(() => /* Action goes here */); } } ... export default connect(mapStateToProps, { updatePost })(Post); 操作返回undefined。

mapDispatchToProps

这里发生了什么?请注意,我正在使用Uncaught (in promise) TypeError: Cannot read property 'then' of undefined

redux-promise
function mapDispatchToProps(dispatch) {
  return {
    dispatch(updatePost(id, props))
      .then(result => {
        if (result.payload.response && result.payload.response.status !== 200) {
         dispatch(updatePostFailure(result.payload.response.data));
        } else {
         dispatch(updatePostSuccess(result.payload.data));
        }
      });
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Post);
export function updatePost(id, props) {
  const request = axios.put(`${ROOT_URL}/posts/${id}`, props);

  return {
    type: UPDATE_POST,
    payload: request,
  };
}

export function updatePostSuccess(activePost) {
  return {
    type: UPDATE_POST_SUCCESS,
    payload: activePost,
  };
}

export function updatePostFailure(error) {
  return {
    type: UPDATE_POST_FAILURE,
    payload: error,
  };
}

1 个答案:

答案 0 :(得分:2)

mapDispatchToProps函数的语法似乎不正确。 它必须返回包含方法作为属性的对象。

尝试写出类似的东西:

function mapDispatchToProps(dispatch) {
  return {
    updatePost() {
      return dispatch(updatePost(id, props))
        .then(result => {
          if (result.payload.response && result.payload.response.status !== 200) {
           return dispatch(updatePostFailure(result.payload.response.data));
          }
          return dispatch(updatePostSuccess(result.payload.data));         
        });
    }
  }
}