前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >React技巧之重定向表单提交

React技巧之重定向表单提交

作者头像
chuckQu
发布2022-08-19 15:35:02
发布2022-08-19 15:35:02
1.5K00
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

原文链接:https://bobbyhadz.com/blog/react-redirect-after-form-submit[1]

作者:Borislav Hadzhiev[2]

正文从这开始~

总览

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

  1. 使用useNavigate()钩子,比如说,const navigate = useNavigate();
  2. 调用navigate()函数,并传入路径 - navigate('/contacts')
  3. navigate()函数让我们以编程的方式进行导航。
代码语言:javascript
代码运行次数:0
运行
复制
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>;
}

react-redirect-on-form-submit.png

详情

useNavigate 钩子返回函数,让我们以编程的方式进行导航。比如form表单被提交后或者按钮被点击后。

navigate 函数可以被传递一个数值。比如说,1表示返回上一页,1表示前进一页或一个路径,例如navigate('/about')。该函数也接收一个options对象。

代码语言:javascript
代码运行次数:0
运行
复制
const handleSubmit = event => {
  event.preventDefault();

  // 👇️ redirect
  navigate('/contacts', {replace: true});
};

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

换句话说,导航到新的路由,并不会将新的条目推入到历史堆栈。所以如果用户点击后退按钮,他们将无法导航到前一个页面。

这是很有用的。举个例子,当用户登录成功后,你不想让用户点击后退按钮,然后回到登录页面时,就可以使用replace配置。或者,你有一个路由需要重定向到其他页面时,你不想让用户点击后退按钮,然后再次重定向,也可以使用replace配置。

要在你的应用程序中使用useNavigate钩子,请确保index.js文件里的App组件包裹在Router组件中。

代码语言:javascript
代码运行次数:0
运行
复制
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 包中的任何钩子。

参考资料

[1]

https://bobbyhadz.com/blog/react-redirect-after-form-submit: https://bobbyhadz.com/blog/react-redirect-after-form-submit

[2]

Borislav Hadzhiev: https://bobbyhadz.com/about

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总览
  • 详情
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档