在呈现的 html 中的 componentDidMount 上添加 javascript 对象

Add javascript object on componentDidMount in rendered html

我想在出于跟踪目的安装组件时将 javascript 对象添加到模板中。对象需要像这样呈现:

var tracking = {
        pagename: 'page name',
        channel: 'lp',
        subSection1: 'section',
        pageidentifier: 'identifier'
      }

我已经在 componentDidMount 函数中设置了一个状态对象,但我似乎无法让该对象出现在页面上。

下面是我在渲染函数中调用的内容:

<script>{`
      var dataLayer = ${this.state.tracking}
    `}</script>

这个returns [object,object] 但我需要它来写出对象。

我该怎么做?我找不到任何这样做的例子,这似乎是一件很简单的事情,但我想不通

附加 script 标签的一种方法是:

componentWillMount() {
        const script = document.createElement("script");
        script.text= this.state.tracking;    
        document.body.appendChild(script);
}

如果这个 object 是全局的,为什么不直接将它附加到 window?
window.dataLayer = this.state.tracking;

如果您希望与 React 范围之外的跟踪功能进行交互,您也可以使用全局功能。在你index.html:

<script>
  document.MyTrackingFunc = function (data) {
    console.log(data);
  }
</script>

并且在你的 componentDidMount 函数中:

document.MyTrackingFunc(someData);