开发者问题收集

React Router 渲染错误组件

2021-06-30
342

我正在使用 HashRouter 呈现不同的页面。我遇到的问题是,当我访问 /service/app/sort 时,它呈现 <MainPage /> ,而我期望它呈现 <ChildPage />

这与我的路由器类似

    <HashRouter>
      <Switch>
        <Route path="/service/app">
          <MainPage />
        </Route>
        <Route path="/service/app/sort">
          <ChildPage />
        </Route>
      </Switch>
    </HashRouter>

可能有帮助的其他信息:

在我的 <MainPage /> 上,我有一个按钮来重定向 onClick

  const history = useHistory();

  const handleSortClick = () => {
    console.log('click me')
    let path = "/service/app/sort";
    history.push(path);
  };

当我单击它一次时,我得到了“单击我”console.log,并且链接更改为 /service/app/sort,但它仍然是 <MainPage /> 。如果我再次单击它,我会收到警告

“警告:哈希历史记录无法推送相同的路径;新条目将不会添加到历史记录堆栈中”

1个回答

您可能面临此问题,因为 URL 的开头被 react-router-dom 解释为真,并且无论如何都允许您访问 /service/app

例如, /service/app 路由不仅会检测此路由,还会检测 /service/app/1/service/app1 ,因为它在路径中有 /service/app

为了防止这种情况,您需要将 exact 属性传递给路由,这样 react-router 就会明白您需要精确访问此路由才能呈现该组件。

<Route path="/service/app" exact={true}>
  <MainPage />
</Route>
josepholiveira
2021-06-30