按类型排除 React Router 中路径参数的值
Exclude a value for a path parameter in React Router by type
我对路由组件有些迷惑。想象一下,我有这两条路线,它们有自己的路径:
<Route path='/person/add' exact component={PersonForm}/>
<Route path='/person/:id' exact component={PersonView}/>
/person/add 应该显示一个表单,我可以在其中创建一个新的 Person
/person/:id 应该显示具有给定 ID 的人。
问题 >> 如果我导航到 /person/add 它也会显示 /person/:id 的组件因为字符串 "add" 对“:id”有效。
有什么办法可以避免这种情况吗?例如告诉 :id 应该是一个数字?
找到一个可能的解决方案:您可以在路由周围使用Switch。然后它将只匹配第一个匹配的。
<Switch>
<Route path='/person/add' exact component={PersonForm}/>
<Route path='/person/:id' exact component={PersonView}/>
</Switch>
我遇到的问题是我有几条路线;
/locations/:locationId
/locations/new
但是当我使用 react-router
中的 matchPath
函数时,当我在 /locations/new
时,它会 return 对 /locations/:locationId
的误报。我通过将自定义正则表达式传递给我的标识符解决了这个问题;
/locations/:locationId([a-z0-9-]{36})
这将检查我的“locationId”是否为 uuid,否则将不匹配。也可能排除像“new/edit/add”
这样的词
这些资源对我有帮助;
我对路由组件有些迷惑。想象一下,我有这两条路线,它们有自己的路径:
<Route path='/person/add' exact component={PersonForm}/>
<Route path='/person/:id' exact component={PersonView}/>
/person/add 应该显示一个表单,我可以在其中创建一个新的 Person
/person/:id 应该显示具有给定 ID 的人。
问题 >> 如果我导航到 /person/add 它也会显示 /person/:id 的组件因为字符串 "add" 对“:id”有效。
有什么办法可以避免这种情况吗?例如告诉 :id 应该是一个数字?
找到一个可能的解决方案:您可以在路由周围使用Switch。然后它将只匹配第一个匹配的。
<Switch>
<Route path='/person/add' exact component={PersonForm}/>
<Route path='/person/:id' exact component={PersonView}/>
</Switch>
我遇到的问题是我有几条路线;
/locations/:locationId
/locations/new
但是当我使用 react-router
中的 matchPath
函数时,当我在 /locations/new
时,它会 return 对 /locations/:locationId
的误报。我通过将自定义正则表达式传递给我的标识符解决了这个问题;
/locations/:locationId([a-z0-9-]{36})
这将检查我的“locationId”是否为 uuid,否则将不匹配。也可能排除像“new/edit/add”
这样的词这些资源对我有帮助;