当前位置: 首页 > 知识库问答 >
问题:

如何在url更改时调试响应路由器未加载组件

刁茂才
2023-03-14

我使用的是react-router-dom version4.3.1,单击链接后,URL会发生变化,但不会呈现React组件(事实上,调试器不会在代码中的任何位置停止)。我已经尝试使用withcomponentexcept关键字,但这并不起作用。在以下两种解决方案中提到了它:React router更改url,但不查看;React route使用browserhistory更改url,但什么也不发生;它唯一起作用的时候是使用refresh按钮刷新页面。我正在index.js中的元素中加载路由器:

reactdom.render( ,document.getElementById(“root”));

export const AppRouter = () => {
    return (
        <>
        <HashRouter>
        <div>
        <Switch>
        <Route path="/page1" component={Page1} />
        <Route path="/page1" component={withRouter(Page2)} /> //still doesn't work
        <Route exact path="/" component={Home} />
        </Switch>
        </div>
        </HashRouter>
        </>
        )}

然后在我的页面中我有:

<Router>
        <div>
        <Link to={'/page1'}>Page 1</Link>
        <Link to={'/page2'}>Page 2</Link>
        </div>
</Router>

有趣的是,它还在工作,但在我重新排列组件的加载顺序后,它就停止工作了。如何调试?谢了。

共有1个答案

曹沛
2023-03-14

路由器中嵌套路由器会导致这种问题。单击 后,您将更新顶部 元素中的历史堆栈,而不是 元素中的历史堆栈。我认为,如果删除内部 ,一切都应该开始工作。

export const AppRouter = () => {
  return (
    <>
      <HashRouter>
        <div>
          <Link to={"/page1"}>Page 1</Link>
          <Link to={"/page2"}>Page 2</Link>
        </div>
        <div>
          <Switch>
            <Route path="/page1" component={Page1} />
            <Route path="/page1" component={withRouter(Page2)} /> //still
            doesn't work
            <Route exact path="/" component={Home} />
          </Switch>
        </div>
      </HashRouter>
    </>
  );
};
 类似资料:
  • 我知道这不是react router的默认行为/功能,可以帮助我们轻松地重新加载当前组件,但我真的需要在我的应用程序中使用它。 我的应用程序处理产品。我有一个可以加载的产品列表,当我单击某个项目时,它会显示相关的产品详细信息。 在该页面上,我有加载相同组件的相关产品链接,但有另一个产品详细信息,位于 我在我的组件willmount中获取数据,似乎如果我只更改URL,就不会装载新组件,因此,我总是显

  • 当我使用url/Details时,我的浏览器会导航到该url,但不会更改视图。任何其他路由抛出404,因此它似乎可以识别路由,但不能更新。

  • 我有一个组件,它显示了可以使用url查询参数过滤的项目列表,这些项目从api分页,如果设置了过滤器,我需要再次调用第一个页面,这个第一次调用是在路由器的解析器中,所以我需要的是路由器以相同的方式重新加载,就像我来自其他URL一样。 app.routes.ts app.resolver.ts app.component.ts app.service.ts 其他.ts组件

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如

  • 问题内容: 我需要在 不更改URL的情况下 进行路由。 在自己实现此功能之前,我尝试过通过React Router寻找一些东西。我看到有这样一个东西 : createMemoryHistory([options]) createMemoryHistory创建一个不与浏览器URL交互的内存历史对象。当您需要自定义用于服务器端呈现,自动测试的历史记录对象或不想操纵浏览器URL(例如,将应用程序嵌入到i