Javascript 承诺使用mapDispatchToProps时不返回

Javascript 承诺使用mapDispatchToProps时不返回,javascript,reactjs,promise,redux,react-redux,Javascript,Reactjs,Promise,Redux,React Redux,最近,我已经从使用一个乐观操作过渡到再添加两个乐观操作来检测成功/失败服务器响应 凭借乐观的态度,我能够在行动中传递来自承诺的速记方式和链条: class Post extends Component { onUpdateClick(props) { this.props.updatePost(this.props.params.id, props) .then(() => /* Action goes here */); } } ... export de

最近,我已经从使用一个乐观操作过渡到再添加两个乐观操作来检测成功/失败服务器响应

凭借乐观的态度,我能够在行动中传递来自承诺的速记方式和链条:

class Post extends Component {
  onUpdateClick(props) {
    this.props.updatePost(this.props.params.id, props)
      .then(() => /* Action goes here */);
  }
}

...

export default connect(mapStateToProps, { updatePost })(Post);
现在,我正在调度多个操作,并使用
mapDispatchToProps
操作返回未定义

Uncaught (in promise) TypeError: Cannot read property 'then' of undefined
这是怎么回事?请注意,我使用的是
reduxpromise

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);



您的
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));         
        });
    }
  }
}

我认为您必须使用
connect(mapstatetops,{updatePost,updateAlbumType})(Post)将您的
updateAlbumType
操作映射到
Post
props抱歉,引用了其他模型。那应该是
updatePost
。但在我的第二个示例中,它们应该通过我的
mapDispatchToProps
函数映射到
Post
道具:
导出默认连接(mapstatetops,mapDispatchToProps)(Post)非常感谢!这个答案来得正是时候。只有一个问题。你为什么要退回这批货?dispatcher中的函数不应该返回操作中的对象吗?您必须返回
dispatch
,因为如果您不返回任何内容
updatePost()
将被评估为
未定义的
,而
分派(…)
是一个承诺。明白了。再次感谢!
const initialState = { 
  activePost: { post: null, error: null, loading: false },
};

export default function(state = initialState, action) {
  let error;

  switch (action.type) {
    case UPDATE_POST: {
      return { ...state, activePost: { ...state.post, loading: true, error: null } };
    }

    case UPDATE_POST_SUCCESS: {
      return { ...state, activePost: { post: action.payload, loading: false, error: null } };
    }

    case UPDATE_POST_FAILURE: {
      error = action.payload || { message: action.payload.message };

      return { ...state, activePost: { ...state.activePost, loading: false, error: error } };
    }
  }
}
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));         
        });
    }
  }
}