React 路由器中的动态路径

2024-01-31

我正在尝试将我的网站从传统的网络应用程序方法迁移到基于反应的应用程序。在此过程中,我遇到了与网址相关的问题。在我的网站中,在服务器端我使用网址重写将 url 映射到正确的控制器的功能。但我无法弄清楚如何在反应路由器中处理这个事情。我当前的反应路由器代码如下所示

<BrowserRouter>
    <Route exact path="/" component={Home}/>
    <Route path="/black-forest" component={Product}/>
    <Route path="/cakes" component={ProductList}/>
</BrowserRouter>

这段代码是我为构建原型而编写的。但理想情况下有许多不同的网址可以指向ProductList成分。同样有很多url可以指向Product成分。

例如, 以下网址指向ProductList成分 - http://www.example.com/best-cakes-in-australia - http://www.example.com/cake-delivery-in-india - http://www.example.com/flowers-delivery-in-canada

总的来说,我有大约 10,000 个这样的 url,它们是使用服务器端创建的UrlRewrite因此它们不遵循特定的模式。这些网址大多指向ProductList or Product成分。

如何在我的 React 路由器配置中为所有这些 url 创建路径?任何指示将不胜感激。


您可能有一个单独的端点来检查请求的网址,该网址返回“Product”或“ProductList”等页面类型,并且根据此结果您可以加载更多数据

例如,假设您有http://www.example.com/api/urlcheck http://www.example.com/api/urlcheck

在你的路由器中:

<Route exact path="/" component={ Home } />
<Route path="/:customPath" component={ Wrapper } />

在包装中

constructor(props) {
  super(props)
  this.state={
    componentName: null
  }
}

componentDidMount() {
  let pathname = this.props.location.pathname.substr(1)
  // alternatively you can get pathname from this.props.location.match.params.customPath
  fetch(/* send request to http://www.example.com/api/urlcheck with pathname */)
  .then((response)=>{ this.setState({componentName: response.componentName }) })
}

render (){
  const { componentName } = this.state

  if(componentName === 'Product') return <Product />
  else if(componentName === 'ProductList') return <ProductList />
}

在 Product 或 ProductList 组件中,您可以以类似的方式通过 id 或任何其他键请求特定的数据集。

但请记住,如果 SEO 很重要,您很可能希望进行服务器端渲染,而上面的示例中没有发生这种情况。componentDidMount仅在浏览器中呈现,您必须将其替换为 componentWillMount (React 生命周期中唯一在 SSR 上运行的函数)。

SSR 有点麻烦,尤其是基于其他请求的响应的请求。 Redux-saga 让这类东西的生活变得更加轻松,所以我建议在你的情况下也采用 saga 方式。

你可以看一下反应传奇通用 https://github.com/max-gram/react-saga-universal快速启动并运行 saga 和 SSR。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 路由器中的动态路径 的相关文章

随机推荐

  • Node JS请求模块不发送表单数据

    我正在使用 Node js 中的 请求 模块发出发布请求 如下所示 request post url http localhost 4004 api v1 notifications post form msg msg userID use
  • Vuejs 元素值变化事件?

    我有一个元素想要观察这样的变化 span class lower 50 span 用 vuejs 可以干净地做到这一点吗 我尝试查看文档 但找不到类似的内容 我想在 VueJs 中每当 50 更改为其他内容时启动一个自定义事件 你有没有尝试
  • SQL Server 2005 中外键与复合主键的关系

    我有两张桌子 Table1 FileID BundledFileID Domain and Table2 FileID FileType FileName 表2中FileID and FileType是复合主键 我想创建一个外键关系Tabl
  • angularjs ng-options嵌套json数据

    我正在为我的网络应用程序使用 AngularJS 我的目标是使用两个下拉列表ng options 第一个下拉列表显示国家 地区列表 另一个给出所选国家 地区的语言首选项 作为 AngularJS 的新手 我能够显示数据 但整个对象显示为单个
  • 获取 Composable 中状态的先前值 - Jetpack Compose

    假设我的代码如下所示 Composable fun ExampleList val tickers by exampleViewModel tickers observeAsState LazyColumn items items tick
  • 如何禁止临时工

    对于 Foo 类 有没有办法在不给它命名的情况下禁止构造它 例如 Foo hi 并且仅在您给它一个名称时才允许它 如下所示 Foo my foo hi 第一个的生命周期只是语句 第二个是封闭块 在我的用例中 Foo正在测量构造函数和析构函数
  • iOS 中 opengl 顶点数据的对齐有多重要

    OpenGL ES 编程指南讨论了应该避免未对齐的顶点数据 并给出了将数据对齐到 4 字节块的示例 OpenGL ES 编程指南 http developer apple com library ios documentation 3DDr
  • 泛型:确保参数的类型相同

    我有以下方法 protected
  • 在谷歌折线图中的同一行上组合实线和虚线格式

    我在我的应用程序中使用谷歌折线图来显示当前值和预测值 我收到的数据来自数据库 当前值和预计值 我希望看到直到当前分数的实线和未来预计分数的虚线 请让我知道如何实现这一目标 Example 匹配 我5月10日的当前费用是5000美元 到10月
  • 在 Mathematica 中使用图形通过交叉替换磁盘

    考虑以下列表 dalist 47 9913 11 127 208 47 5212 10 3002 208 49 7695 9 96838 160 48 625 12 7042 436 这些是屏幕上眼睛注视的坐标 在每个子列表中 1是 X 坐
  • 使用窗口关闭按钮完全关闭 OS X 应用程序

    当用户在运行时使用应用程序关闭文档窗口时 我需要完全关闭我的应用程序 目前 当他们单击窗口时 应用程序保持打开状态并显示其菜单栏 我阅读了适用于 iOS 的这篇文章 并在 plist 文件中添加了一个条目 http developer ap
  • 如何初始化静态 std::atomic 数据成员

    我想为名为的类生成标识符order以线程安全的方式 下面的代码无法编译 我知道原子类型没有复制构造函数 我认为这解释了为什么这段代码不起作用 有人知道如何让这段代码真正发挥作用吗 有替代方法吗 include
  • 如何在 DataTable.Select(Expression) 中使用 SELECT GROUP BY?

    我尝试通过从每个组中选择第一行来删除重复的行 例如 PK Col1 Col2 1 A B 2 A B 3 C C 4 C C 我想要一个回报 PK Col1 Col2 1 A B 3 C C 我尝试了以下代码 但它不起作用 DataTabl
  • 在 HTML 表格中显示嵌套数组

    这是一个简单的问题 我花了几个小时试图解决 我有一个数组 其中包含几个学生的信息以及他们在测试中得分的分数 总共有 8 个主题 每个主题有 5 个参数 该数组如下所示 Array Ron gt Array subject1 gt Array
  • 将长 xticks 分成 2 行 matplotlib

    我有以下 matplotlib 我想将 x ticks 分成 2 行而不是 1 行 因为有时它们太长 这就是为什么它们会遇到另一行 然后就无法读取 x ticks 请记住 X ticks 不是硬编码的 它们正在变化 所以 x 刻度并不总是相
  • NSSortDescriptor - 将 # 和数字推到列表末尾 - iphone xcode

    我有一个表格视图 显示按字母顺序排序的联系人并将其分为几个部分 我在用 NSSortDescriptor sortDescriptor NSSortDescriptor alloc initWithKey dataSource keyNam
  • 如何使用 Liferay Tomcat 减少部署时间

    我使用 Liferay 6 并结合 Struts2 我正在使用 Liferay Bundled Tomcat 7 它工作正常 我的问题是 每当资源 portlet xml 或 java 文件 发生更改以及单击 build xml 时 部署都
  • 我可以在 Visual Studio 中的代码块注释中添加链接吗?

    我可以在 Visual Studio 中的代码块注释中添加链接吗 例如 block 1 class class1 block 2 class class2 review class1 1 类 是 1 类的链接 提前致谢 You can bo
  • 如何知道我的代码在 IDE 中以“调试”模式运行?

    如何编写在 调试 模式下 例如在 Eclipse 中作为 调试为 Java 应用程序 调用 与在 运行 模式下 例如在 Eclipse 中作为 作为 Java 应用程序运行 调用 下运行时行为不同的代码 也就是说 例如 代码可以在 作为 J
  • React 路由器中的动态路径

    我正在尝试将我的网站从传统的网络应用程序方法迁移到基于反应的应用程序 在此过程中 我遇到了与网址相关的问题 在我的网站中 在服务器端我使用网址重写将 url 映射到正确的控制器的功能 但我无法弄清楚如何在反应路由器中处理这个事情 我当前的反