Javascript 反应路由器:将扩展路径另存为路由参数

Javascript 反应路由器:将扩展路径另存为路由参数,javascript,reactjs,react-router,Javascript,Reactjs,React Router,我想要一个如下所示的路径: /projects/:projectId/:folder1/:folder2/.../:folderN/:currentFolder/ 其中,projectId将是一个类似于1的字符串,folder1、folder2、…、folderN来自于在该位置拆分路径 这样的正则表达式可以完全匹配它: /\/?projects\/(\w|\d)+\/folders\/((\w|\d)*\/?)*(\w|\d)+\/?/; 但是,我在将当前文件夹之前的文件夹路径保存为路由中的

我想要一个如下所示的路径:

/projects/:projectId/:folder1/:folder2/.../:folderN/:currentFolder/
其中,
projectId
将是一个类似于
1
的字符串,
folder1、folder2、…、folderN
来自于在该位置拆分路径

这样的正则表达式可以完全匹配它:

/\/?projects\/(\w|\d)+\/folders\/((\w|\d)*\/?)*(\w|\d)+\/?/;
但是,我在将当前文件夹之前的文件夹路径保存为路由中的参数时遇到问题。也就是说,我可以获得类似于
:projectId
:currentFolder
的内容,但我想将指向当前文件夹的文件夹列表保存为
:path
或其他内容

在react router中保存此任意路径的语法是什么?

参数仅匹配

对于数量不确定的文件夹,除了具有
N
路由(其中
N
是已知的最大可能文件夹数)之外,没有任何实际的方法可以使用params执行此操作。如果
N
在不增加更多路线的情况下不断增加,那么这样做当然会很乏味,并且会中断

最好使用通配符运算符匹配所有文件夹,然后在需要访问文件夹的任何位置对
params.splat
值进行字符串拆分

<Route path=":productId/**/:currentFolder" component={Folder} />

react路由器的哪个版本?我没有在2/3的路线参数中获得
splat
。你用的是4吗?我用的是3.0.0Hmm版本,我测试这个的版本是3。在React Router源代码中的这一行之后,是否可以
console.log(pattern,paramNames)
?(编辑
节点_modules
文件夹中的文件)。
const Folder = ({ params }) => {
  const { productId, splat, currentFolder } = params
  const folders = splat.split('/')
  // productId = '17'
  // currentFolder = 'folder'
  // folders = ['this', 'is', 'the', 'path', 'to', 'the']
  ...
}