Cha*_* L. 1 javascript reactjs react-router
我是新手,在他们提交登录表单后,我正在努力将演示应用程序中的用户重定向到默认页面。我不完全确定为什么return <Redirect to="/default" />;不做任何事情。
应用程序.js
import React from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Form from "./Form";
import Default from "./default";
const App = () => {
return (
<Router>
<div>
<Switch>
<Route path="/default" component={Default} />
<Route path="/" component={Form} />
</Switch>
</div>
</Router>
);
};
export default App;
Run Code Online (Sandbox Code Playgroud)
表单.jsx
import React from "react";
import useForm from "./useForm";
import validate from "./LoginFormValidationRules";
import { Redirect } from "react-router-dom";
const Form = () => {
const { values, errors, handleChange, handleSubmit } = useForm(
login,
validate
);
function login() {
console.log("logged in");
return <Redirect to="/default" />;
}
return (
<div className="section is-fullheight">
<div className="container">
<div className="column is-6 is-offset-3">
<div className="box">
<form onSubmit={handleSubmit} noValidate>
<div className="field">
<label className="label">Email Address</label>
<div className="control">
<input
autoComplete="off"
className={`input ${errors.email && "is-danger"}`}
type="email"
name="email"
onChange={handleChange}
value={values.email || ""}
required
/>
{errors.email && (
<p className="help is-danger">{errors.email}</p>
)}
</div>
</div>
<div className="field">
<label className="label">Password</label>
<div className="control">
<input
className={`input ${errors.password && "is-danger"}`}
type="password"
name="password"
onChange={handleChange}
value={values.password || ""}
required
/>
</div>
{errors.password && (
<p className="help is-danger">{errors.password}</p>
)}
</div>
<button
type="submit"
className="button is-block is-info is-fullwidth"
>
Login
</button>
</form>
</div>
</div>
</div>
</div>
);
};
export default Form;
Run Code Online (Sandbox Code Playgroud)
使用Form.jsx
import { useState, useEffect } from "react";
const useForm = (callback, validate) => {
const [values, setValues] = useState({});
const [errors, setErrors] = useState({});
const [isSubmitting, setIsSubmitting] = useState(false);
useEffect(() => {
if (Object.keys(errors).length === 0 && isSubmitting) {
callback();
}
}, [errors]);
const handleSubmit = event => {
if (event) event.preventDefault();
setErrors(validate(values));
setIsSubmitting(true);
};
const handleChange = event => {
event.persist();
setValues(values => ({
...values,
[event.target.name]: event.target.value
}));
};
return {
handleChange,
handleSubmit,
values,
errors
};
};
export default useForm;
Run Code Online (Sandbox Code Playgroud)
小智 5
我更新了我的解决方案。
import React, {useState} from "react";
import useForm from "./useForm";
import validate from "./LoginFormValidationRules";
import { Redirect } from "react-router-dom";
const Form = () => {
const { values, errors, handleChange, handleSubmit } = useForm(
login,
validate
);
const[loggedIn, setLoggedIn] = useState(false);
function login() {
console.log("logged in");
setLoggedIn(true);
return <Redirect to="/default" />;
}
return (
<div className="section is-fullheight">
{
loggedIn && (
<Redirect to="/default" />
)
}
<div className="container">
<div className="column is-6 is-offset-3">
<div className="box">
<form onSubmit={handleSubmit} noValidate>
<div className="field">
<label className="label">Email Address</label>
<div className="control">
<input
autoComplete="off"
className={`input ${errors.email && "is-danger"}`}
type="email"
name="email"
onChange={handleChange}
value={values.email || ""}
required
/>
{errors.email && (
<p className="help is-danger">{errors.email}</p>
)}
</div>
</div>
<div className="field">
<label className="label">Password</label>
<div className="control">
<input
className={`input ${errors.password && "is-danger"}`}
type="password"
name="password"
onChange={handleChange}
value={values.password || ""}
required
/>
</div>
{errors.password && (
<p className="help is-danger">{errors.password}</p>
)}
</div>
<button
type="submit"
className="button is-block is-info is-fullwidth"
>
Login
</button>
</form>
</div>
</div>
</div>
</div>
);
};
export default Form;
Run Code Online (Sandbox Code Playgroud)
但我想说有一些解决方案可以实现它。上面是其中之一。请尝试使用它。
| 归档时间: |
|
| 查看次数: |
1566 次 |
| 最近记录: |