如何在 React 中重定向到外部链接?

2024-01-25

我正在构建一个画廊,您单击图像,它将使用 props 加载到单独的组件中,该图像是一个 URL,取自数组,其中 src 属性通过 CSS 作为背景图像加载。我的挑战是将 src 数据连接到子组件。查看原始问题 https://stackoverflow.com/questions/67831464/having-a-problem-loading-in-data-to-child-component-in-react/67843144#67843144

我找到了使用链接组件传递数据的解决方案。现在 URL 字符串的读取方式如下:http://localhost:3000/https://photos.smugmug.com/photos....正如您所看到的,字符串中的地址中有一个地址。

我尝试过更改 URL 字符串的状态,但没有成功。

我的问题是,如何编写重定向来修复 HTTP 地址,删除本地主机地址

UPDATE非常感谢 Taylor、Drew 和 Ajeet 的帮助! 解决方案发布在下面,主要问题是我需要 Image 组件中的一个函数来连接 GalleryContainer 组件中的 src 属性。 我还将所有“a 标签”更改为“链接组件”以保持一致性。更多详细信息请参见 Drew 和 Taylor 的解释解决方案以及 Ajeet 代码框here https://codesandbox.io/s/patient-browser-3mqjj?file=/src/Public/UI/ImageContainer.js


Issues

  1. 我不知道为什么,但你似乎不使用Link组件在您的应用程序中保持一致;当使用锚点时(<a>)标记这些类型的链接将重新加载页面和您的应用程序。手动设置时也会出现类似的问题window.location.href.
  2. The Image没有正确访问通过的路由状态。

Solution

App

将您的路线从更具体到最不具体重新排序,并从Switch组件,仅Route and Redirect组件是有效的子组件。

function App(props) {
  return (
    <>
      <Router>
        <Switch>
          <Route path="/gallery" component={GalleryList} />
          <Route path="/image" component={Image} />
          <Route path="/" component={Home} />
        </Switch>
      </Router>
    </>
  );
}

Home

Use Link组件进入图库。

import { Link } from "react-router-dom";

...

<Link to="/gallery">
  <h4>Click Here to Enter Gallery!</h4>
</Link>

图库列表

Use Link返回主页的链接组件。

import { Link } from "react-router-dom";

...

<Link to="/">Home</Link>

画廊容器

一致地引用图像源,即src。也传递图像id在路线状态下,使用Link.

const GalleryConatiner = (props) => {
  return (
    // generates the gallery list!
    <ul>
      <li className={styles["gallery-list"]}>
        <Link
          to={{ pathname: "/image", state: { id: props.id, src: props.src } }}
        >
          <div
            className={styles["div-gallery"]}
            style={{
              backgroundImage: `url(${props.src})`,
              height: 250,
              backgroundSize: "cover"
            }}
          ></div>
        </Link>
      </li>
    </ul>
  );
};

src/公共/图像

Use a Link返回画廊的链接。使用useLocation钩子来访问传递的路由状态。

import { Link, useLocation } from 'react-router-dom';

const Image = (props) => {
  const { state: { id, src } = {} } = useLocation();
  return (
    <section>
      <h1 className={styles["h1-wrapper"]}>Image :{id}</h1>
      <div className={styles.wrapper}>
        <Link to="/gallery">BACK TO GALLERY</Link>
        <ImageContainer id={id} key={id} src={src} />
      </div>
    </section>
  );
};

src/Public/ImageContainer

目前尚不清楚您对此组件的计划是什么,请单击div将传递的图像渲染为背景,因此只需删除window.location.href逻辑与history.push如果您想导航到其他地方。您可以访问history对象通过useHistory反应钩子。

Demo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 React 中重定向到外部链接? 的相关文章

随机推荐

  • WPF Prism - 在哪里放置资源?

    我有一个棱镜应用程序和各种模块 我想知道哪里是找到样式 画笔 控件模板 数据模板等资源的最佳位置 我应该制作一个资源字典并将所有内容都放在那里吗 每个模块应该有自己的资源吗 还是每个视图 我想遵循 Prism 保持一切模块化的目标 但我也不
  • 使用 javascript 库跟踪用户活动 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以跟踪用户在网页上的每个操作并创建日志 这个想法是通过 AJAX 将用户操作日志传输到服务器并保
  • Maven WAR 依赖项 - 无法解析包?

    我有战争依赖 性
  • 辞去 ScrollView Touch 上的第一响应者职务

    如何在 ScrollView 触摸事件上隐藏键盘 场景是这样的 gt 视图 gt 滚动视图 gt 文本字段 我想在触摸滚动视图时隐藏键盘 我尝试覆盖滚动视图的类 但仍然无法做到 这样做会有所帮助 interface MyClass
  • 纯分裂的熵计算为 NaN

    我编写了一个函数来计算向量的熵 其中每个元素代表一个类的元素数量 function x Entropy a t sum a t repmat t 1 size a 2 x sum a t log2 a t end e g a 4 0 the
  • 如何在 jsonp ajax 调用中使用 type: "POST"

    我正在使用 JQuery ajax jsonp 我有下面jQuery 代码 ajax type GET url Login aspx Send the login info to this page data str dataType js
  • .erb 、 .rhtml 和 .html.erb 之间有什么区别?

    erb rhtml 和 html erb 之间有什么区别 真的没什么 这只是 Rails 1 和 Rails 2 之间理念的改变 在 Rails 2 之前 有 file rhtml file rxml 和 file rjs 在 Rails
  • 如何生成彼此不相交的正方形(随机定位、大小相等、随机旋转)?

    我一直致力于在 1x1 网格上生成一层随机旋转并放置的正方形 我已经能够生成在网格上随机放置和旋转的单个正方形 但我不确定如何改进代码以生成更多彼此不相交的随机正方形 当前代码如下所示 我的一个随机正方形的示例 https i stack
  • 如何正确重写克隆方法?

    我需要在我的一个没有超类的对象中实现深度克隆 处理检查的最佳方式是什么CloneNotSupportedException由超类抛出 即Object 一位同事建议我按以下方式处理 Override public MyObject clone
  • 通过 Groovy XML 解析器使用字符串作为代码

    我是 groovy 的新手 我希望这是一个简单的问题可以解决 我正在读取 xml 文档 然后我可以访问如下数据 def root new XmlParser parseText xmlString println root foo bar
  • 如何禁用 Google 跟踪代码管理器控制台日志记录

    将 Google 跟踪代码管理器添加到项目后 我在控制台中看到了很多日志条目 有办法禁用它吗 控制台日志充满了噪音 GoogleTagManager info Processing logged event vs with paramete
  • Node.js ENOENT 读取 PDF 文件

    我需要阅读 pdf 文件并使用pdf text extract 它在我的本地主机上完美运行 但是当我尝试在服务器上运行该程序时 出现以下错误 spawn called 0 pdftotext 1 layout enc UTF 8 tmp t
  • Keychain 中存储的字符串有长度限制吗?

    我想在iOS上将一些用户信息作为字符串存储在Keychain中 那么Keychain中的字符串有长度限制吗 Thanks 我组装了一个 iOS 应用程序 可以使用以下命令进行二分搜索这个图书馆 https github com kishik
  • twig - 将函数传递到模板中

    目前 我将函数放在一个类中 并将该类的实例传递到模板中 并将所需的函数作为类方法调用 unneededclass blah 我需要像下面这样做 blah 是否可以 更新 2015 年 5 月 14 日 评论者指出我大部分都是错的 如果您确实
  • 如何合并两个UIImage?

    我正在尝试合并两个不同的图像并创建一个新的图像 这就是我想做的方式 我有这张图片 A 这是一张 PNG 图像 我想将其与我从手机中获取的另一张图像 B 合并 以创建如下所示的图像 我需要一个将 A 与 B 合并创建 C 的函数 尺寸必须保留
  • Nuget Pack 不支持程序集版本上的位数

    I need nuget pack生成只有 3 位数字的包版本 我们想对其进行语义版本控制 但是当我在具有AssemblyVersion属性设置为 1 0 0 生成的 nupkg 文件在其元数据 和文件名 中以版本 1 0 0 0 结尾 为
  • 如何查看tomcat的容器日志?

    如何查看tomcat的容器日志 我从 catalina out 日志中收到此错误 SEVERE localhost startStop 1 org apache catalina core StandardContext startInte
  • 在 SQL Server 中,一行的 %%physloc%% 值总是相同吗?

    我一直在探索它的实际用途 physloc 伪列作为行标识符 不幸的是 我一直无法找到官方文档 physloc 我需要知道这个值是否会改变 我做了一些测试 看起来相当静态 即使我创建数据库的备份并在不同的服务器上恢复 physloc 每行保持
  • Kafka - 无法建立与节点-1的连接

    我正在尝试使用 apache flink 流处理 kafka 主题 但我遇到了这个问题 2018 04 10 02 55 59 856 ProducerConfig values acks 1 batch size 16384 bootst
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover