【问题标题】:Add query string to ALL links in application将查询字符串添加到应用程序中的所有链接
【发布时间】:2021-02-04 22:04:46
【问题描述】:

情况是这样的...我有一个 Next.js 应用程序已经运行了一段时间,我们已经编写了大量代码。

最近我们开始投放一些广告,我们需要了解它们的效果...

有人可以通过这两个网址中的任何一个登陆我们的网站。

www.site.com/page // user came to our site NOT from ad
www.site.com/page?ad=campaign1 // user came from one of our ads.

如果用户使用“广告”查询字符串访问我们的网站,我想将其附加到我们网站上的所有链接。

我将如何在 react/nextjs 中做到这一点?我们已经构建了大量组件,甚至在一些博客文章中我们只是在渲染原始 HTML。

无需编辑无数组件。我将如何将查询字符串附加到所有链接?

谢谢

【问题讨论】:

标签: javascript reactjs next.js


【解决方案1】:

您可以创建一个自定义Link 组件,作为next/link 的包装器,它将检查查询字符串并将其添加到Next.js 的hrefLink

// components/link.jsx

import NextLink from 'next/link';
import { useRouter } from 'next/router';

const Link = ({ children, href }) => {
  const router = useRouter();
  const [, queryString] = router.asPath.split('?');
  const hrefWithQuery = `${href}${queryString ? `?${queryString}` : ''}`;
  return <NextLink href={hrefWithQuery}>{children}</NextLink>;
};

export default Link;

然后将所有 next/link 的导入替换为新组件的路径,无论它们在哪里使用(简单的搜索和替换就可以了)。

【讨论】:

  • 有些组件(比如博客文章的正文)只有原始的“dangerouslySetInnerHTML”内容。你会怎么处理呢?
  • 在将其设置为dangerouslySetInnerHTML 之前,您可以解析原始HTML,查找链接并使用与上述相同的逻辑修改它们的hrefs。想不出不涉及解析 HTML 的解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多