如何用reactjs实现GTM

问题描述 投票:0回答:2

我正在尝试用reactjs实现GTM。我使用过react-google-tag-manager,但它没有解决目的。 不知何故,数据层需要采用特定的格式,并且需要位于标签的正下方,但这只是我一次可以实现的其中之一。 我尝试将代码直接放在 template.html 中并从我想要的组件中调用该函数,但这不起作用。

import React from 'react';
import gtmParts from 'react-google-tag-manager';

class GoogleTagManager extends React.Component {
   componentDidMount() {        
       const dataLayerName = this.props.dataLayerName || 'dataLayer';
       const scriptId = this.props.scriptId || 'react-google-tag-manager-gtm';

       if (!window[dataLayerName]) {
           const gtmScriptNode = document.getElementById(scriptId);

           eval(gtmScriptNode.textContent);
       }
   }

   render() {

       const gtm = gtmParts({
           id: this.props.gtmId,
           sourcegroup: this.props.gtmGroupname,
           sourceid:this.props.gtmSource,
           age:this.props.age,
           mtongue:this.props.gtmMtongue,
           city:this.props.city,

       });

       return (
           <div>
               <div>{gtm.noScriptAsReact()}</div>
               <div id={this.props.scriptId || 'react-google-tag-manager-gtm'}>
                   {gtm.scriptAsReact()}
               </div>
           </div>
       );        
   }
}

export default GoogleTagManager;

我正在 DataLayer 中推送参数并检查 google tag Assistant 插件,整个 datalyer 是空的。

reactjs google-tag-manager
2个回答
5
投票

我昨天遇到了这个问题,为了解决它,我必须将我尝试记录的所有属性放在

additionalEvents
属性下。像这样的东西:

const gtm = gtmParts({
    id: this.props.gtmId,
    additionalEvents: {
         sourcegroup: this.props.gtmGroupname,
         sourceid:this.props.gtmSource,
         age:this.props.age,
         mtongue:this.props.gtmMtongue,
         city:this.props.city
    }
})

并且还要避免使用

eval()
,因为这是一个危险的惯例。像这样更新您的代码:

if (!window[dataLayerName]) {
    const script = document.createElement("script")
    const gtmScriptNode = document.getElementById(scriptId)
    const scriptText = document.createTextNode(gtmScriptNode.textContent)

    script.appendChild(scriptText)
    document.head.appendChild(script)
}

0
投票

这是在 React 中实现 GTM 的快速简便的方法:

将以下代码添加到 public/index.html 文件中的

<head>
标签中:

<script nonce="**your-nonce-here**">
var gtmId = '**your-gtm-id-here**';
(function (w, d, s, l, i) {
  w[l] = w[l] || []; w[l].push({
    'gtm.start':
      new Date().getTime(), event: 'gtm.js'
  });
  var f = d.getElementsByTagName(s)[0],
    j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
      'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', `${gtmId}`);
</script>
© www.soinside.com 2019 - 2024. All rights reserved.