React Router Redirect 没有重定向

React Router Redirect is not redirecting

我正在尝试在提交表单后重定向离开此页面。由于某种原因,它什么都不做。我没有收到错误,页面保持不变。我正在使用 React 路由器 4。我在这里缺少什么?

handleSubmit(event) {
  event.preventDefault();

  if (isObjectEmpty(errorsInForm)) {
    Meteor.call(
      'user.multiplechoice.answer',
      conductedExamId,
      (err, res) => {
        if (err) {
          alert(err.reason);
        } else {
          <Redirect to="/test" />;
        }
      }
    );
  }
}

<Redirect /> 是一个应该由 render 函数返回的组件,而不是在事件处理程序中。如果你想使用 Redirect 组件,你必须在你的 api 调用成功时设置一个状态,并根据该状态渲染组件。

state = {
    formSuccess: false
}

handleSubmit(event) {
    /* Call to api was successful */
    this.setState({ formSuccess: true });
}

render() {
    if (this.state.formSuccess) {
        return (<Redirect to="/test" />);
    }

    /* The rest of your render function */
}

如果您不想使用 Redirect 组件而只想重定向,则必须能够访问 Router 组件的历史记录。为此,您可以将具有 handleSubmit 函数的组件与 withRouter HOC 包装起来,使其能够访问历史记录。

import { withRouter } from "react-router";

class MyAwesomeFormComponent {
    handleSubmit() {
        /* Call to api was successful */
        this.props.history.push("/test");
    }
}

export default withRouter(MyAwesomeFormComponent);

首先使用 react-router-dom 中的高阶组件 withRouter ‘’’ 然后使用 this.props.history.push(“route-path”); ‘’’