使用 React Router 重定向表单提交

使用 React Router 重定向表单提交

Redirect on form submit using React Router

使用 React Router 重定向表单提交:

  1. 使用useNavigate()钩子,例如const navigate = useNavigate();
  2. 调用将navigate()路径传递给它的函数 – navigate('/contacts')
  3. navigate()函数让我们以编程方式导航。
应用程序.js
import {Link, Routes, Route, useNavigate} from 'react-router-dom'; function Home() { const navigate = useNavigate(); const handleSubmit = event => { event.preventDefault(); // 👇️ redirect to /contacts navigate('/contacts'); }; return ( <form onSubmit={handleSubmit}> <input /> <button type="submit">Submit</button> </form> ); } export default function App() { return ( <div> <div> <nav> <ul> <li> <Link to="/">Home</Link> </li> <li> <Link to="/contacts">Contacts</Link> </li> </ul> </nav> <Routes> <Route path="/contacts" element={<Contacts />} /> <Route path="/" element={<Home />} /> </Routes> </div> </div> ); } function Contacts() { return <h2>Contacts</h2>; }

对表单提交做出反应重定向

useNavigate挂钩返回一个函数,让我们编程方式导航,例如在提交表单或单击按钮后。

navigate函数可以传递一个增量,例如-1向后
1翻一页,向前翻一页或路径,例如navigate('/about')

该函数还接受一个options对象。

应用程序.js
const handleSubmit = event => { event.preventDefault(); // 👇️ redirect navigate('/contacts', {replace: true}); };

当该replace属性设置为true对象options时,历史堆栈中的当前条目将替换为新条目。

换句话说,导航到新路由不会将新条目推送到历史堆栈中,因此如果用户单击后退按钮,他们将无法导航到上一页。

这很有用,例如,当用户登录时 – 您不希望他们能够单击后退按钮并返回到登录页面。

或者,如果您有一个重定向到不同页面的路由 – 您不希望用户单击后退按钮并再次重定向。

useNavigate在应用程序中使用挂钩,请确保文件中的App组件index.js包装在Router.

索引.js
import {createRoot} from 'react-dom/client'; import App from './App'; import {BrowserRouter as Router} from 'react-router-dom'; const rootElement = document.getElementById('root'); const root = createRoot(rootElement); // 👇️ wrap App in Router root.render( <Router> <App /> </Router> );
Router组件包装你的 React 应用程序的最佳位置是在你的index.js文件中,因为那是你的 React 应用程序的入口点。

一旦你的整个应用程序都被一个组件包裹起来Router,你就可以在你的组件中的任何地方使用 react router 包中的任何钩子。

发表评论