Reactjs React router dom useParams 不适用于动态 url

ass*_*ler 10 reactjs react-router react-router-dom

使用“react-router-dom”:“^5.2.0”和“react”:“16.8.6”,

我有这个:

<Switch>
   <Route path="/users" component={Users} />
   <Route path="/users/:id" component={Users} />
</Switch>
Run Code Online (Sandbox Code Playgroud)

并在用户组件中:

const param = useParams();
console.log(param);
Run Code Online (Sandbox Code Playgroud)

因此,如果我输入/users/users/10始终将参数呈现为空对象。我在这里缺少什么?

Bri*_*son 10

Switch组件将仅呈现其第一个匹配项。

第一个Route匹配路径的/users/10<Route path="/users" component={Users} />

这意味着即使你有第二个Route说“10”应该是一个名为 的参数id,它也会忽略它并将其视为第一个Route没有参数的参数。

exact您可以通过使用第一个上的 prop轻松纠正此行为Route

<Route exact path="/users" component={Users} />
Run Code Online (Sandbox Code Playgroud)

这将指示react-router仅在 URL 与path 完全匹配时才匹配该路由,并且允许/users/10向下传递到Route您实际希望它匹配的 。然后您将获得您期望的可用参数。