当前位置: 首页 > 知识库问答 >
问题:

javascript - react 的路由是否可以写在模块里?

孔鹤龄
2024-01-11

我用 react 写了一个页面,在这个页面里有几个模块,其中一些模块都有 a 标签,比如

footer.jsx

import React from 'react';const Footer = () => {    return (        <footer className="footer">                 <a href="/blog" target="_blank">blog</a>                 <a href="/help" target="_blank">help</a>        </footer>    )}export default Footer;

我想实现的是,当点击这里的 blog 或者 help 后会访问对应的页面,blog 访问 /bloghelp 访问 /help

然后在各自的页面里,可以重定向到其它的页面去,比如

blog -> /blog -> https://blog.domain.com

help -> /help -> https://help.domain.com

我的问题是

  • 是否可以将这些功能都在这一个 react 模块 footer.js 里实现?
  • 是必须要在项目文件 app.jsx 里写路由吗?在 app.jsx 里写路由,然后做重定向,比如

     import React from 'react'; import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom'; import Footer from './Footer';  const App = () => {    return (      <Router>        <Switch>          <Redirect from="/blog" to="https://blog.domain.com" />          <Redirect from="/help" to="https://help.domain.com" />        </Switch>        <Footer />      </Router>    );  };  export default App;

我这么考虑的原因是,如果每一个模块里的链接,都能在模块本身写路由之类的,会方便很多,如果都要到 app 这里来写路由,会感觉很奇怪。

路由

共有1个答案

何峰
2024-01-11

对于你的问题,答案是肯定的。你可以在 React 模块中实现路由功能,而不需要在项目文件 app.jsx 中写所有的路由。

你可以在每个模块中使用 react-router-dom 中的 Link 组件,而不是直接使用 a 标签。这样,你就可以在每个模块中控制路由跳转,而不需要在 app.jsx 中写所有的路由。

以下是一个示例,演示如何在 Footer 模块中使用 Link 组件:

import React from 'react';import { Link } from 'react-router-dom';const Footer = () => {  return (    <footer className="footer">      <Link to="/blog" target="_blank">blog</Link>      <Link to="/help" target="_blank">help</Link>    </footer>  );};export default Footer;

在这个示例中,当用户点击 "blog" 或 "help" 时,将会触发相应的路由跳转。你可以在每个模块中实现自己的路由逻辑,而不需要在 app.jsx 中写所有的路由。

至于重定向,你可以在每个路由组件中实现。例如,你可以在 Blog 模块中重定向到 https://blog.domain.com

import React from 'react';import { Redirect } from 'react-router-dom';const Blog = () => {  // 在这里实现重定向逻辑  if (/* 满足重定向条件 */) {    return <Redirect to="https://blog.domain.com" />;  }  // 其他组件内容...};export default Blog;

通过这种方式,你可以在每个模块中实现自己的路由和重定向逻辑,而不需要在 app.jsx 中写所有的路由。

 类似资料:
  • 问题内容: 基本路线是这样的: 是否可以命名该路由并在任何模板中使用它,以便可以像这样使用它: 灵感来自Django :) 问题答案: 没有开箱即用的机制。但是,您可以模仿Django的样式:定义文件,该文件将包含URL数组。首先开始: myviews.js urls.js 现在在 app.js (或任何主文件)中,您需要将URL绑定到Express。例如这样: app.js 现在,您可以定义自定

  • 我正在使用react路由器(2.4.1),我有一个通配符(path=“*”)回退路由来显示“未找到”组件。 我的其中一条路线定义如下: 我可以以任何方式验证路由参数,以检查该类别是否存在于我的类别列表中?如果没有,我希望路由器下降到通配符,以便显示未找到组件

  • 问题内容: 是否可以仅针对XHR请求限制Symfony 2路由?我想声明只能通过AJAX访问的路由。 我不想像这样在每个AJAX特定操作中添加一些额外的行: 我想定义: AJAX请求的一条规则 对相同URL进行GET / POST请求的一条规则 为了避开上述情况。 问题答案: 我知道这个问题有点老,但是与此同时 ,Symfony 2.4* 中引入 了 一种 新的解决方法 。 * 匹配表达式 对于a

  • 问题内容: 我有一个需要一些模块。有没有办法可以注入模块本身?我意识到这有点麻烦。 例: 我想在这种情况下,解决方案是将方法转换为完整的类。这显然是一个简化的示例;我正在处理的代码有很多这样的方法,因此将它们分成单独的类并引入配置它们的模块会增加相当多的混乱- 我认为Guice就是要减少样板混乱? 也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么… 问

  • 问题内容: 加载Angular应用后,我需要一些模板可以脱机使用。 这样的事情将是理想的: 问题答案: 有一个 模板缓存服务 :$ templateCache ,可用于在javascript模块中预加载模板。 例如,取自文档: 甚至还有一个艰巨的任务,可以从html文件中预先生成一个javascript模块:grunt-angular- templates 另一种可能不太灵活的方法是使用 内联模板

  • 我有一个用material UI设计的web应用程序,正如你们在下面看到的,我使用按钮导航来浏览我的基本登录页组件。 我曾尝试将React Router与这些预定义的导航组件一起使用,但没有成功,有没有可能将Router与材质UI的按钮导航一起使用?物料界面中的按钮导航文章ButtonNavigation API