javascript - 重定向到组件 onSubmit

标签 javascript reactjs react-router

提交表单后,我的 react 应用程序没有重定向到仪表板页面。我尝试使用 react-router-dom Redirect 功能,但仍然没有成功。然后我选择加入 BrowserHistory.push 但仍然没有成功。

对于后一个试验,URL 更改为 “/dashboard”,但组件仍保留在表单页面上,在我重新加载页面之前,它不会移动到仪表板。

表单字段

<form>
  <Input
    displayValidationErrors={displayValidationErrors("fullname", validators)}
    name="fullname"
    type="text"
    label="Full Name"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("password", validators)}
    name="password"
    type="password"
    label="Password"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("password2", validators)}
    name="password2"
    type="password"
    label="Confirm Password"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("email", validators)}
    name="email"
    type="email"
    label="Email Address"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors(
      "phone_number",
      validators
    )}
    name="phone_number"
    type="number"
    label="Phone Number"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("card_number", validators)}
    value={data.card_number}
    name="card_number"
    type="text"
    label="Card Number"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("date", validators)}
    value={data.date}
    name="date"
    type="text"
    label="Expiry Date"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <Input
    displayValidationErrors={displayValidationErrors("pin", validators)}
    name="pin"
    type="password"
    label="PIN"
    onChange={(e) => handleInputChange(e.target.name, e.target.value)}
  />
  <div className="col-lg-12 loginbttm">
    <div className=" login-btm login-button">
      <Button
        handleClick={onSubmit}
        type="submit"
        className="btn btn-primary"
        label="SUBMIT"
        disabled={!isFormValid(validators)}
      />
    </div>
  </div>
</form>;

onSubmit函数

const onSubmit = (e) => {
  e.preventDefault();
  browserHistory.push("/dashboard");
};

按钮组件

const Button = ({ type, className, handleClick, label, disabled }) => (
  <button
    type={type}
    className={className}
    onClick={handleClick}
    disabled={disabled}
  >
    {label}
  </button>
);

我的app.js

function App() {
  return (
    <Router>
      <div className="App">
        <Switch>
          <Route exact  path="/dashboard">
            <Dashboard />
          </Route>
          <Route exact path="/">
            <Form />
          </Route>
        </Switch>
      </div>
    </Router>
  );
}

export default App;

最佳答案

我没看到createBrowserHistory或类似<Router history={history}>所以我猜你正在使用默认的浏览器历史记录。在这种情况下,您需要 withRouter使其发挥作用:

import React from "react";
import { withRouter } from "react-router-dom";

function App() {
  const onSubmit = (e) => {
    e.preventDefault()
    this.props.history.push("/personalInfo");             
  }
  ...
}
export default withRouter(App);

更多关于withRouter解决方案here

更多关于createBrowserHistory解决方案here

对于具有 react-router 的功能组件V5,还可以用hooks来做:

import { useHistory } from "react-router-dom";

function App() {
  let history = useHistory();
  const onSubmit = (e) => {
    e.preventDefault()
    history.push('/dashboard');        
  }

  return (
    <Router>
      <div className="App">
        ...
      </div>
    </Router>
  );
}

看看this了解更多useHistory

关于javascript - 重定向到组件 onSubmit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60146498/

相关文章:

javascript - 在 Angular Cordova 应用程序中的一个请求中发布多个文件

javascript - OnSubtreeModified 添加我的功能

javascript - 多态参数javascript

javascript - 单击按钮时水平 react 滚动组件

reactjs - 如何将React应用程序部署到godaddy服务器?

javascript - 使用 React Router V4 隐藏导航栏

Javascript - 如何创建表单元素并提交?

reactjs - Redux TS 通用类型 'Dispatch<S>' 需要 1 个类型参数

reactjs - React Router 的多个参数

reactjs - 无法读取未定义的属性(读取 'path')