首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react应用程序中的dangerouslySetInnerHTML不支持包含Segment.io标记

react应用程序中的dangerouslySetInnerHTML不支持包含Segment.io标记
EN

Stack Overflow用户
提问于 2020-01-07 22:36:48
回答 1查看 531关注 0票数 0

我正在尝试在我的react/NextJS应用程序中包含Segment.io。我遵循了前面设置Google Analytics的函数设置的约定

代码语言:javascript
复制
const segmentWriteKey = 'xyz';

export default class CustomDocument extends Document {
  setGoogleTags = () => {
    return {
      __html: `
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());
        gtag('config', '${gaTrackingId}');
        console.log('here2');
      `,
    };
  };

  setSegment = () => {
    return {
      __html: `
      !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on"];analytics.factory=function(t){return function(){var e=Array.prototype.slice.call(arguments);e.unshift(t);analytics.push(e);return analytics}};for(var t=0;t<analytics.methods.length;t++){var e=analytics.methods[t];analytics[e]=analytics.factory(e)}analytics.load=function(t,e){var n=document.createElement("script");n.type="text/javascript";n.async=!0;n.src="https://cdn.segment.com/analytics.js/v1/"+t+"/analytics.min.js";var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(n,a);analytics._loadOptions=e};analytics.SNIPPET_VERSION="4.1.0";
              analytics.load(${segmentWriteKey});
              analytics.page();
              console.log('here1');
      `,
    };
  };

<script
            dangerouslySetInnerHTML={this.setGoogleTags() /* eslint-disable-line react/no-danger */}
          />
          <script
            dangerouslySetInnerHTML={this.setSegment() /* eslint-disable-line react/no-danger */ }
          />

我可以看到"here2“被调用,但从来没有调用过"here1”。有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-08 01:02:20

看起来您的函数没有正确关闭。需要在__html字符串内的函数末尾添加两个右括号:

代码语言:javascript
复制
      ...
      analytics.page();
      console.log('here1');
    };
  };
`,

我也不清楚${segmentWriteKey}的值从何而来。除非您打算使用模板文字(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals),否则您可能不需要${}语法。此外,调用analytics.load()似乎需要两个参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59630554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档