javascript - 如何将状态传递给 gtm.js 函数?
问题描述
我是一家初创公司的实习生,我是唯一的前端开发人员。
我必须在 Next.js 中编写一个网站,我的老板让我添加 Google 跟踪代码管理器。
我按照 Next 在他们的 github 示例中给出的示例进行操作。
现在我的老板要求我在我的 gtm.js 中添加一个 searchTerm,如下所示:
export const GTM_ID = process.env.NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID;
export const pageview = (url) => {
console.log("search ", searchCity);
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "search",
searchTerm: searchCity, //this should be dynamically replaced with an actual search query
page: url,
});
};
我在 _app.js 中声明了 searchCity 状态:
import GoogleTagManager from "../components/GoogleTagManager";
function MyApp({ Component, pageProps }) {
// manage search queries
const [searchCity, setSearchCity] = useState("");
return (
<GoogleTagManager>
<Component
{...pageProps}
searchCity={searchCity}
setSearchCity={setSearchCity}
/>
</GoogleTagManager>
);
}
export default MyApp;
但是如何将 searchCity 传递给函数 pageview ?
该功能位于应用程序组件之外的 googleTagManager 组件中,因此我无法将 searchCity 作为道具传递。
解决方案
好吧,你会为函数命名第二个searchCity
参数pageview
:
export const pageview = (url, searchCity) => {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
event: "search",
searchTerm: searchCity,
page: url,
});
};
在您的GoogleTagManager.js中,您可以像这样传递参数:
router.events.on("routeChangeStart", url => gtm.pageview(url, searchCity));
编辑:
您将它传递给_app.js中的错误组件。它应该如下所示:
<GoogleTagManager searchCity={searchCity} setSearchCity={setSearchCity}>
<Component
{...pageProps}
/>
</GoogleTagManager>
); }
现在您可以像这样在GoogleTagManager.js中对其进行解构:
const GoogleTagManager = ({ children, setSearchCity, searchCity}) => {
推荐阅读
- reactjs - 具有生产反应构建的部署管道
- java - 如何解决 Java util 输入不匹配错误
- angular - 为什么 Typescript 要求分配 Getter?
- java - System.currentTimeMillis() 表现得很奇怪
- javascript - 如何将故事书嵌套的 storiesOf api 转换为 CSF 格式
- regex - 匹配除 Tcl 中的正则表达式模式之外的所有内容
- python - NLP-Name Entity Recognition:如何将实体的不同命名映射到同一个实体?AMC vs AMC 娱乐 vs AMC 剧院
- c# - 使用 PostAsync 将内容正文中的 JSON 传递到端点
- vue.js - ( Vue.js ) 为什么带有 $emit 的按钮不起作用?
- css - 在按钮上单击更改文本值