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

当单击图像reactjs时,路由到另一个组件和页面

云锦
2023-03-14

预期:当单击来自一个组件(PhotosList)的图像时,它会路由到具有指定url的另一个页面以查看另一个组件(图像详细信息)

现实:当点击图像时,两个组件呈现在同一页面上,但url不同。

使用“react Router dom”中的导入{BrowserRouter作为路由器、交换机、路由、链接};

这是返回的功能组件(PhotosList)

 return (
    <Router>
      <div className="layout">
        <Masonry gutter={"5 px"} columnsCount={3}>
          {photosList.map((photo: any) => (
            <Link to={"/details"}>
              <img src={photo.download_url} />
            </Link>
          ))}
        </Masonry>

        <button onClick={loadMore} className="btn-grad">
          {isLoading ? "Loading..." : "Load More"}
        </button>
        <Switch>
          <Route exact path={"/details"} component={ImageDetails}></Route>
        </Switch>
      </div>
    </Router>
  );

应用程序文件是

const App = () => {
  return (
    <div className="App">
      <header>Album</header>
      <PhotosList />
    </div>
  );
};

export default App;

共有2个答案

咸高谊
2023-03-14

据我所知,您已经呈现了PhotoList组件,然后呈现了一个照片列表,每个照片都有一个链接到/细节

在同一组件中,您设置了/details路由。

每当您单击重定向到/details链接时,PhotoList组件将(应该)卸载。卸载此组件后,路由也将卸载,该路由设置应在/details路由上呈现的组件。因此,您使用的是/details,但路由器不知道应该呈现哪个组件,因为以下代码:

<Switch>
  <Route exact path={"/details"} component={ImageDetails}></Route>
</Switch>

不再存在。

为了避免这种情况,不要把Routes放在应用程序的下面。路由应始终靠近顶层(路由器的子孙)。这使得项目更容易管理。我有超过100个路由的项目,我把我的路由分成单独的文件(例如,每个模块都有一个ModuleRoutes.js文件,我在其中为该模块设置路由),然后您可以创建一个Root路由器组件,它呈现这些单独的JS文件(实际上是React组件),并且您在您的内呈现Root路由器

通过创建一个包含每个路由详细信息的对象数组(路由名称、路径、路由组件、要传递给组件的函数/数据、定义为逻辑表达式的访问控制(真/假)(即user.isLoggedIn==true),您可以将其抽象得更高。通过采用这种抽象,您可以最大限度地减少错误的空间,因为当错误和bug以这种形式(对象)出现时,它们更容易被发现,而JSx占用更多的代码行,有混乱的缩进,并且通常不是很干净。

桑睿识
2023-03-14
return (
      <div className="layout">
        <Masonry gutter={"5 px"} columnsCount={3}>
          {photosList.map((photo: any) => (
            <Link to={"/details"}>
              <img src={photo.download_url} />
            </Link>
          ))}
        </Masonry>

        <button onClick={loadMore} className="btn-grad">
          {isLoading ? "Loading..." : "Load More"}
        </button>
      </div>
  );

在应用程序文件中

const App = () => {
  return (
   <Router>
    <div className="App">
      <header>Album</header>
      <PhotosList />
      <Switch>
          <Route exact path={"/photilist"} component={PhotosList}></Route>
          <Route exact path={"/details"} component={ImageDetails}></Route>
        </Switch>
    </div>
   </Router>
  );
};

export default App;
 类似资料:
  • 在我的应用程序中,用户登录后我有一个主页和一些其他页面。问题是,当我在其中一个页面中刷新页面时,它会再次将我发送到主页。这是我的路线: 应用程序组件具有路由器出口 那么,我期待什么呢?首先,如果我是我的“列表”页面()并且我刷新了这个页面,它应该留在那里。在那一页。但现在它将我重定向到本地主机:4200/home。当然,当我单击一个列表项时,它应该将我发送到本地主机:4200/detail/ite

  • 背景: 我已经开始为一家虚构的律师事务所构建一个Ionic应用程序,用于一般业务。以下是指向我的github repo的链接:https://www.github.com/jamesslater/boutiquesolicitors 它从一个登录页面开始,目前唯一接受的凭据是用户名:用户密码:123 登录后,应用程序将路由到“成员/仪表板”。我按照本教程学习了角度布线流程:https://devd

  • 我有一些这样的路线 在NewUrlComponent中,我可以像这样轻松地获取数据 我遇到的问题是我在屏幕上有另一个组件,不知何故,我需要在另一个组件中显示该数据标题。我不知道这有可能吗?

  • 我使用Reavt V6路由。 我正在努力让我的路线在游戏组件中工作。 在完全空白的页面中查看/测试结果。而它应该在gamecomponent中加载犯罪模块。访问/呈现gamecomponent,但/test不会呈现gamecomponent及其内部的路由。 我怎样才能让它工作? 访问url/crime会导致被加载,并且 应该上膛了。 app.js 专用路线: 游戏成分:

  • 问题内容: 我有两个组成部分。我想从第二个组件中调用第一个组件的方法。我该怎么做? 这是我的代码。 第一部分 第二部分 问题答案: 你可以做这样的事情 使用静态

  • 问题内容: 现在,我有一个div,它基本上是一个巨大的正方形,在div内,我还有另一个div,它是简单的文本,上面写着“ Upload File”,同时还有一个隐藏的input type = file元素。当用户按下div时,我要触发文件上传元素。到目前为止,我想出的代码是: 因此,我在CSS中将文件输入元素设置为。一旦他们在div id =“ test”中的任意位置单击,我想触发对文件上传元素的