当前位置: 首页 > 面试题库 >

使用可选的路径参数来响应路由器

昝存
2023-03-14
问题内容

我想用可选的path参数声明一个路径,因此当我添加它时,页面会做一些额外的事情(例如,填充一些数据):

http:// localhost / app / path / to /
page
<=渲染页面 http:// localhost / app /
path / to / page / pathParam

<=根据pathParam使用某些数据渲染页面

在我的React Router中,我具有以下路径,以支持两个选项(这是一个简化的示例):

<Router history={history}>    
   <Route path="/path" component={IndexPage}>
      <Route path="to/page" component={MyPage}/>
      <Route path="to/page/:pathParam" component={MyPage}/>
   </Route>    
</Router>

我的问题是,我们可以在 一条 路线中声明吗?如果仅添加第二行,则找不到没有参数的路由

编辑#1:

这里提到的有关以下语法的解决方案对我不起作用,这是一个合适的解决方案吗?文档中是否存在?

<Route path="/product/:productName/?:urlID?" handler={SomeHandler} />

我的react-router版本是:1.0.3


问题答案:

您发布的修改对旧版本的React-router(v0.13)有效,并且不再起作用。

从版本开始,1.0.0您可以通过以下方式定义可选参数:

<Route path="to/page(/:pathParam)" component={MyPage} />

以及多个 可选 参数:

<Route path="to/page(/:pathParam1)(/:pathParam2)" component={MyPage} />

您可以使用括号( )来包装路线的可选部分, 包括 前导斜杠(/)。请查看官方文档的“
路线匹配指南” 页面。

注:
:paramName参数相匹配的URL段到下一个/?#。有关具体的路径和参数的更多信息,请参见此处。

React Router v4及更高版本

React Router v4从根本上不同于v1-v3,并且 官方文档中 也没有明确定义可选路径参数。

而是,指示您定义path-to-regexp可以理解的path参数。这样可以在定义路径(例如重复模式,通配符等)时提供更大的灵活性。因此,要将参数定义为可选参数,请添加尾随的问号()。?

因此,要定义可选参数,请执行以下操作:

<Route path="/to/page/:pathParam?" component={MyPage} />

以及多个 可选 参数

<Route path="/to/page/:pathParam1?/:pathParam2?" component={MyPage} />

注意: React Router v4 与react-router-relay
不兼容 (在此处了解更多信息)。请改用v3或更低版本(建议使用v2)。



 类似资料:
  • 所以我有一些路线,比如<code>/category/tech</code>和<code</categority/tech/new<code>和<code>/category/tech/old</code>等等 他们都使用 或者我必须分别定义它们,就像

  • 我试图创建一个符合以下所有URL的路由: 这是我目前的路线: 根据关于https://github.com/rackt/react-router/blob/master/docs/guides/basics/RouteMatching.md 此路由应该完全匹配,但与上面的URL都不匹配。 我需要做什么来支持这个可选参数? 我在React路由器版本0.13.3,如果我删除,那么我可以匹配第一个URL

  • 将路由链接到参数 显示特定产品详细信息的组件的路由需要该产品ID的路由参数。我们可以使用以下实现: 注意:product-details路由的路径中的 ,它将参数放在路径中。例如,要查看ID为5的产品的产品详细信息页面,必须使用以下URL:localhost:3000/product-details/5 注意,指令传递一个数组,该数组指定路径和路由参数。或者,我们可以使用JS跳转: Product

  • 例如,在具有分页列表的路由上,网址可能如下所示,表示我们已加载第二个网页: 使用指令和来传递查询参数。例如: 或者,我们可以使用服务通过JS跳转: 读取查询参数 See Official Documentation on Query Parameters

  • 问题内容: 我有一条看起来像这样的路线: 但是,这行不通-如果我打电话,它会到达路线,但是如果我打电话,它不会。 是否可以有一个可选的splat参数,或者我必须使用正则表达式来检测到这一点? 编辑 : 更清楚地说,这是我要达到的要求: 第一和第二个参数是 必需的 第一个参数是静态的,第二个参数是命名的参数。 可以附加任意数量的 可选 附加参数,并且仍然可以实现。 问题答案: 这适用于Express

  • 我需要以两种方式路由到某个组件——一种是带参数的,另一种是不带参数的。我已经搜索了可选参数,但不知何故找不到太多信息。 所以我的路线: 当我以编程方式调用参数时,一切都很好 但是我也需要通过导航这样称呼它 组件接受道具 以及用作此类的组件 现在,我设法让它工作的丑陋方式是复制路线,让其中一个不带道具: 它实际上是有效的,但我对它不满意-也在开发模式下vuejs警告我 当然有一种方法可以在组件调用中