You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中QnaNew组件history.push跳转失效但Login/Join组件正常如何解决

问题根因

  1. 你定义的createPost action 仅接收formProps一个参数,没有接收你在QnANew组件里传入的第二个回调函数,因此你写在组件里的this.props.history.push逻辑完全不会执行。
  2. 虽然你在createPost action 内部已经写了history.push('/qna'),但没有加错误捕获逻辑,一旦POST请求出错,后续的跳转代码也不会执行。

修复方案(二选一即可)

方案1:使用action内置的history跳转(不需要组件传回调)

修改actions/index.js里的createPost逻辑,增加错误捕获:

export const createPost = (formProps) => async (dispatch) => {
  try {
    const response = await qna.post('/qnanew', { ...formProps });
    dispatch({ type: CREATE_QNA, payload: response.data });
    history.push('/qna');
  } catch (e) {
    console.error('创建帖子失败:', e);
    // 可在此处扩展错误提示的dispatch逻辑
  }
};

然后修改QnANew.js里的onSubmit逻辑,删掉无用的回调:

onSubmit = (formProps) => {
  this.props.createPost(formProps);
};

方案2:保留组件传回调的逻辑(和现有join方法逻辑对齐)

修改actions/index.js里的createPost,接收第二个callback参数并在请求成功后执行:

export const createPost = (formProps, callback) => async (dispatch) => {
  try {
    const response = await qna.post('/qnanew', { ...formProps });
    dispatch({ type: CREATE_QNA, payload: response.data });
    callback?.(); // 执行组件传入的跳转回调
  } catch (e) {
    console.error('创建帖子失败:', e);
  }
};

这个方案不需要修改QnANew组件里的原有onSubmit逻辑,修改后即可正常跳转。


额外排查点

如果修改后还是无法跳转,优先检查两个点:

  • 打开控制台确认qna axios实例的baseURL配置正确,POST /qnanew请求返回200状态码,没有接口报错
  • 确认项目里的history包版本和react-router-dom版本匹配,避免版本不兼容导致history对象失效

内容的提问来源于stack exchange,提问作者poiucode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 12:57:02