如何在 react-router 中使用 onSubmit,同时 onSubmit 检查表单中的详细信息,如果正确,他将 Link="" 传递给另一个组件
how to use onSubmit in react-router while onSubmit checks the details in the form and if it's correct he pass with Link="" to another component
我正在尝试在表单中使用 onSubmit,我希望它检查表单中的详细信息,并根据详细信息来决定是否要传递给 Link 中的另一个组件 - router 我该怎么做,如何编写 Link (它只会在我想要的时候在 onSubmit 函数中通过)?
这是我的路由代码:
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import LogIn from "./components/LogIn";
import HomePage from "./HomePage";
import Todos from "./components/Todos";
import Albums from "./components/Albums";
import Info from "./components/Info";
import Posts from "./components/Posts";
function App() {
return (
<Router>
<div>
<Routes>
<Route path="/" pelement={<HomePage />} />
<Route path="/login" element={<LogIn />} />
<Route path="/todos" element={<Todos />} />
<Route path="/info" element={<Info />} />
<Route path="/albums" element={<Albums />} />
<Route path="/posts" element={<Posts />} />
</Routes>
</div>
</Router>
);
}
export default App;
我希望当我点击此处提交时(在登录组件中向下)它将控制 Link="/" 只有 onSubmit 决定[=13 时才会发生=]
import { FormEventHandler } from "react";
function LogIn() {
const [inputField, setInputField] = useState({
user_name: "",
password: "",
});
const inputChange = (e) => {
e.preventDefault();
setInputField((prevState) => ({
...prevState,
[e.target.name]: e.target.value,
}));
};
const submitButton = (e) => {
e.preventDefault();
if(**the details in the form are correct**)
**add the details to local storage and pass to home page with:<Link to="/"></Link>**
else
alert("details are not correct");
};
return (
<form onSubmit={submitButton}>
<label>Enter you user name</label>
<input
type="text"
name="user_name"
onChange={inputChange}
placeholder="Your user name"
value={inputField.user_name}
/>
<br />
<label>Enter you password</label>
<input
type="password"
name="password"
onChange={inputChange}
placeholder="Your password"
value={inputField.password}
/>
<br />
<button type="submit" >Log In</button>
</form>
);
}
export default LogIn;
您不能 return 像这样的回调中的 Link
组件并期望它被渲染并在 DOM 中执行任何操作。在回调中,您需要使用 navigate
函数发出命令式导航操作。
示例:
import { useNavigate } from 'react-router-dom';
function LogIn() {
const navigate = useNavigate();
...
const submitButton = (e) => {
e.preventDefault();
if (**the details in the form are correct**) {
// add the details to local storage
localStorage.setItem("details", details);
// and pass to home page
navigate("/", { state: { details } });
} else {
alert("details are not correct");
}
};
...
我正在尝试在表单中使用 onSubmit,我希望它检查表单中的详细信息,并根据详细信息来决定是否要传递给 Link 中的另一个组件 - router 我该怎么做,如何编写 Link (它只会在我想要的时候在 onSubmit 函数中通过)? 这是我的路由代码:
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import LogIn from "./components/LogIn";
import HomePage from "./HomePage";
import Todos from "./components/Todos";
import Albums from "./components/Albums";
import Info from "./components/Info";
import Posts from "./components/Posts";
function App() {
return (
<Router>
<div>
<Routes>
<Route path="/" pelement={<HomePage />} />
<Route path="/login" element={<LogIn />} />
<Route path="/todos" element={<Todos />} />
<Route path="/info" element={<Info />} />
<Route path="/albums" element={<Albums />} />
<Route path="/posts" element={<Posts />} />
</Routes>
</div>
</Router>
);
}
export default App;
我希望当我点击此处提交时(在登录组件中向下)它将控制 Link="/" 只有 onSubmit 决定[=13 时才会发生=]
import { FormEventHandler } from "react";
function LogIn() {
const [inputField, setInputField] = useState({
user_name: "",
password: "",
});
const inputChange = (e) => {
e.preventDefault();
setInputField((prevState) => ({
...prevState,
[e.target.name]: e.target.value,
}));
};
const submitButton = (e) => {
e.preventDefault();
if(**the details in the form are correct**)
**add the details to local storage and pass to home page with:<Link to="/"></Link>**
else
alert("details are not correct");
};
return (
<form onSubmit={submitButton}>
<label>Enter you user name</label>
<input
type="text"
name="user_name"
onChange={inputChange}
placeholder="Your user name"
value={inputField.user_name}
/>
<br />
<label>Enter you password</label>
<input
type="password"
name="password"
onChange={inputChange}
placeholder="Your password"
value={inputField.password}
/>
<br />
<button type="submit" >Log In</button>
</form>
);
}
export default LogIn;
您不能 return 像这样的回调中的 Link
组件并期望它被渲染并在 DOM 中执行任何操作。在回调中,您需要使用 navigate
函数发出命令式导航操作。
示例:
import { useNavigate } from 'react-router-dom';
function LogIn() {
const navigate = useNavigate();
...
const submitButton = (e) => {
e.preventDefault();
if (**the details in the form are correct**) {
// add the details to local storage
localStorage.setItem("details", details);
// and pass to home page
navigate("/", { state: { details } });
} else {
alert("details are not correct");
}
};
...