使用react-router时有没有办法将参数限制为某些值?

2024-06-22

我正在使用 React 和 React-router 构建一个站点,并且有两种不同类型的路由,如下例所示:

<Route name="products" path="/:type/*" handler={ ProductList } />
<Route name="generic-template" path="/*" handler={ TemplatePage } />

因此,我的产品页面需要类型参数,可以是 A、B 或 C,并且我希望仅当类型为 A、B 或 C 时,我访问的任何链接才能匹配我的产品路线。举个例子:

  • /type-A/bla-bla-filter -> 应加载 ProductList
  • /type-B/other-params -> 应加载 ProductList
  • /services/details -> TemplatePage 应该加载

但就我现在所拥有的而言,任何页面都与产品路由匹配,因为类型只是匹配斜杠后的第一个字符串。作为解决方法,我尝试将 ProductList 组件包装到单独的包装器组件中,这些组件仅发送该类型参数,如下所示:

var TypeAWrapper = React.createClass({
  render: function () {
    return (
      <ProductList params={{ splat: this.props.params.splat, type: 'A' }} />
    );
  }
});

var TypeBWrapper = React.createClass({
  render: function () {
    return (
      <ProductList params={{ splat: this.props.params.splat, type: 'B' }} />
    );
  }
});

然后我对每种类型的产品使用不同的路线进行静态匹配。

有谁知道更好的解决方案?


摘自官方文档 https://reacttraining.com/react-router/web/example/url-params

   {/* It's possible to use regular expressions to control what param values should be matched.
     * "/order/asc"  - matched
     * "/order/desc" - matched
     * "/order/foo"  - not matched*/}
   <Route
     path="/order/:direction(asc|desc)"
     component={ComponentWithRegex}
   />

您可以将正则表达式与 Route 组件的精确属性混合,以避免产品始终匹配

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

使用react-router时有没有办法将参数限制为某些值? 的相关文章

随机推荐

  • 如何在运行时检查 python 模块是否有效而不导入它?

    我有一个包含子包的包 仅需要在运行时导入其中一个子包 但我需要测试它们是否有效 这是我的文件夹结构 game init py game1 init py constants py game2 init py constants py 目前
  • MVVM 中模型的职责是什么?

    我一直对 模型 应该或不应该包含什么感到有点困惑 教程和示例经常相互矛盾 到目前为止 我一直在谨慎行事 我的模型只暴露 UI 内容 例如用于绑定到视图的属性以及验证逻辑 但是模型中包含其他业务逻辑是否可以接受 假设我想通过网络服务控制机械泵
  • RewriteCond 比较 Apache htaccess 中的两个变量

    我想要一个rewritecond这得到true如果有两个变量HTTP ORIGIN and HTTP HOST是平等的 我试过 RewriteCond HTTP Origin http HTTP HOST 但尽管 Netbeans 语法颜色
  • 是否可以在backbone.js视图中使用全局变量?

    是否可以在backbone js视图中使用全局变量 exmpl var TodoView Backbone View extend counter null is this possible initialize function this
  • Swift 中动态获取 AnyObject 的类型

    我已将参数传递给 AnyObject 类型的函数 因为任何内容都可以传递给它 有没有办法动态获取传递的对象类型 目前尚不清楚问题中 类型 的含义 对于 Swift 中任何类型的任何值 您都可以像这样获取其动态运行时类型 theVariabl
  • 使用什么语言编写 Windows shell 扩展

    我知道如何用 python 编写 shell 扩展 缺点是 它不适用于 64 位 Windows 我不确定每次 发生 事情时创建一个 python 进程会如何降低性能 我知道如何使用 Net C 编写 shell 扩展缺点是 被MS气馁 h
  • 在 R 2.15.2 上安装 Ime4 和 ggplot2 时出现问题

    我在安装 lme4 和 ggplot 包时遇到困难 我尝试通过选择 CRAN 镜像 已经尝试了几个 然后选择软件包来安装它们 并且还尝试了以下操作 install packages lme4 repos http r forge r pro
  • Maya Python API 2.0没有MItDag,那么如何遍历DAG图呢?

    此问题特定于 Autodesk Maya 使用 Maya 2014 SP 2 现在下载 SP 3 使用 Maya Python API 版本 1 时 可以这样遍历 DAG 图 import maya OpenMaya as OM dagIt
  • android 相机:无法将结果 ResultInfo{who=null, request=0, result=-1, data=null} 传递给 Activity

    我真的很沮丧地解决我的问题 我有一个使用相机的应用程序 当相机捕获照片时 它将显示在活动中 当我不使用时cameraIntent putExtra MediaStore EXTRA OUTPUT mPhotoUri 照片将显示在活动中 但名
  • SqlDeveloper:清除网络别名列表

    我使用 sql developer 连接到具有多个不同用户的多个不同的 Oracle 数据库 连接信息保存在tnsnames ora文件 以便当数据库更改服务器时 我不必手动更新与它的所有连接 我最近更新了 tnsnames 文件 现在网络
  • HTML 页面的 jQuery load() 中未加载图像

    我正在使用以下代码在 div 中加载 html 页面 htmlViewer load conversion test to convert 3264 getPageName pageCount htm function response s
  • 在 Activity 之间传递片段

    我想做一个可以支持纵向和横向的应用程序 该布局有两个窗格 左侧是选项 右侧显示结果 选择某个选项后 右侧窗格将显示该选项 但对于肖像来说 没有足够的空间 因此需要单独的活动 每个选项都会生成不同类型的片段 因此当活动之间的所有更改都是在其中
  • 在 Android 中设置微调器 onClickListener()

    我试图让 onClickListener 在 Spinner 上触发 但出现以下错误 Java lang RuntimeException 是 不要为 AdapterView 调用 setOnClickListener 您可能需要 setO
  • 如何在ipad中使用core-plot绘制3D饼图? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须使用 core plot AP
  • 何时使用依赖注入

    最近几天我有一种感觉 依赖注入真的应该被称为 我无法下定决心 模式 我知道这可能听起来很愚蠢 但实际上这是我应该使用依赖注入 DI 背后的原因 人们经常说我应该使用 DI 来实现更高级别的松耦合 我明白了 但实际上 一旦我选择了 MS SQ
  • Smalltalk 变量:为什么要声明它们?

    基本上我可以通过给变量分配一些东西来使用变量 例如 x something 效果很好 但是在类中 如果我定义一个新方法 但没有声明该变量 我会得到一个 对未声明变量 x 的赋值 所以我必须使用 x x something 为什么是这样 正如
  • 禁止将文本粘贴到 HTML 表单中

    有没有办法使用 JavaScript 禁用将文本粘贴到 HTML 表单上的文本字段的功能 例如 我有一个简单的注册表单 用户需要输入电子邮件两次 第二封电子邮件条目是为了验证第一封电子邮件条目中没有拼写错误 但是 如果用户复制 粘贴他们的电
  • 在循环 C++ 中重用线程

    我需要在 C 程序中并行化某些任务 并且对并行编程完全陌生 到目前为止 我通过互联网搜索取得了一些进展 但现在有点卡住了 我想在循环中重用一些线程 但显然不知道如何做我正在尝试的事情 我正在从计算机上的两个ADC卡获取数据 并行获取 然后我
  • 如何使用 awk 将 mac addr 转换为 int?

    Input 192 168 0 1 aa bb cc 00 11 22 192 168 0 1 aa 00 bb 11 cc 22 192 168 10 11 2a bb cc 20 11 22 192 168 10 11 aa 02 bb
  • 使用react-router时有没有办法将参数限制为某些值?

    我正在使用 React 和 React router 构建一个站点 并且有两种不同类型的路由 如下例所示