重定向不起作用,而{this.props.history}却可以

高拉夫

操作成功后,重定向不起作用,但是history.replace起作用。为什么??

import React, { Component } from "react";
import { Formik, Form, Field, ErrorMessage } from "formik";
import * as Yup from "yup";
import { withRouter } from "react-router-dom";

class Login extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div id="loginContainer" className="signinup-container">
        <h3 className="mb-4"> Log In </h3>
        <Formik
          initialValues={{
            email: "",
            password: "",
            rememberMe: false,
            error: ""
          }}
          validationSchema={Yup.object().shape({
            email: Yup.string()
              .required("Please enter email to login.")
              .email("Please enter a valid email."),
            password: Yup.string().required("Please enter your password.")
          })}
          onSubmit={(values, { resetForm, setErrors, setSubmitting }) => {
            setTimeout(() => {
              console.log("Logging in", values);
              setSubmitting(false);
              return <Redirect to="/dashboard" />;
              //this.props.history.replace("/dashboard");
              //this.props.history.push('/dashboard');
            }, 500);
          }}
        >
          {props => {
            const {
              values,
              touched,
              errors,
              isSubmitting,
              handleChange
            } = props;

            return (
              <Form id="loginForm" className="signinupForm" noValidate>
                <ErrorMessage
                  name="error"
                  component="span"
                  className="login-error"
                />
                <div className="form-group ">
                  <label className="form-label" htmlFor="email">
                    Email
                  </label>
                  <Field
                    type={"email"}
                    name="email"
                    placeholder="Enter your email"
                    className={
                      "form-control" +
                      (errors.email && touched.email ? " is-invalid" : "")
                    }
                  />
                  <ErrorMessage
                    name="email"
                    component="span"
                    className="invalid-input"
                  />
                </div>
                {/* Email */}
                <div className="form-group position-relative">
                  <label className="form-label" htmlFor="password">
                    Password
                  </label>
                  <Field
                    type={"password"}
                    name="password"
                    placeholder="Enter your password"
                    className={
                      "form-control" +
                      (errors.password && touched.password ? " is-invalid" : "")
                    }
                  />
                  <ErrorMessage
                    name="password"
                    component="span"
                    className="invalid-input"
                  />
                </div>
                {/* Password */}
                <div className="form-group">
                  <label className="form-label" htmlFor="rememberMe">
                    <input
                      type="checkbox"
                      id="rememberMe"
                      name="rememberMe"
                      onChange={handleChange}
                      defaultChecked={values.rememberMe}
                      value={values.rememberMe}
                    />
                    Remember me
                  </label>
                </div>
                {/* Rememeber Me */}
                {isSubmitting ? (
                  <span className="loader-gif">loading</span>
                ) : null}
                <button
                  type="submit"
                  className="btn btn-filled"
                  disabled={isSubmitting}
                >
                  Login
                </button>
                {/*Submit */}
              </Form>
            );
          }}
        </Formik>
      </div>
    );
  }
}

export default withRouter(Login);

请进入登录页面并检查。Codesandbox链接- https://codesandbox.io/s/winter-hooks-s9vgx

Shubham Khatri

您正在通过onSubmit方法调用重定向JSX组件。但是您不能这样做,因为您需要从render方法中返回JSX元素,这就是为什么需要使用history to update route

     onSubmit={(values, { resetForm, setErrors, setSubmitting }) => {
        setTimeout(() => {
          console.log("Logging in", values);
          setSubmitting(false);
          this.props.history.replace("/dashboard");
        }, 500);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么文件到命名管道的重定向和从文件管道的重定向不起作用,而对cat的管道管理却可以呢?

Traceroute在Linux上不起作用,在Windows上却可以

如何使用this.props.history重定向reactjs

this.props.history.push在某些组件中起作用,而在其他组件中则不起作用

使用this.props.history.push('/')的用户注销重定向不会重定向到所需页面

在React中,渲染重定向总是比使用this.props.history.push更好吗?

重定向到关于提交的新页面:this.props.history.push

为什么实际的鼠标单击不起作用,但是在JS控制台中执行.click()却可以呢?

重定向到相同路径名但具有不同路由参数时,History.push不起作用

install4J:重定向不起作用时,在哪里可以看到应用程序日志

如何使用机架/测试来测试Sinatra重定向?该应用程序可以运行,但测试不起作用

我可以重定向到不同的路线,但如果我刷新浏览器,该路线将不起作用

重定向不起作用?

this.props.navigation.navigate() 不起作用

this.props.history.push()跳过中间页

Codeigniter:重定向不起作用

从@ExceptionHandler重定向不起作用

友好的URL重定向不起作用

Apache Virtualhost重定向不起作用

onBeforeRequest重定向不起作用

重定向功能不起作用

节点/ JavaScript重定向不起作用?

重定向永久不起作用

Laravel重定向异常不起作用

Flask:重定向不起作用

.htaccess内部重定向不起作用

Nodejs Express 重定向不起作用

.htaccess重定向403不起作用

Spring MockMvc重定向不起作用