将 Google 分析添加到 React
Adding Google Analytics to React
我正在尝试将 Google 分析添加到 React Web 应用程序。
我知道如何在 HTML/CSS/JS 站点中执行此操作,并且我也已将其集成到 AngularJS 应用程序中。但是,当涉及到反应时,我不太确定如何去做。
使用 HTML/CSS/JS,我刚刚将它添加到每个页面。
我对 AngularJS 所做的是将 GTM 和 GA 脚本添加到 index.html 并将 UA 标签添加到 HTML div(和按钮)以获得点击。
我如何使用 React 做到这一点?
请帮忙!
更新:2019 年 2 月
看到这个问题被很多人搜索,我决定展开我的解释。
要将 Google Analytics 添加到 React,我建议使用 React-GA.
添加 运行:
npm install react-ga --save
初始化:
在根组件中,通过 运行:
初始化
import ReactGA from 'react-ga';
ReactGA.initialize('Your Unique ID');
要报告页面浏览量:
ReactGA.pageview(window.location.pathname + window.location.search);
要报告自定义事件:
ReactGA.event({
category: 'User',
action: 'Sent message'
});
可以在 github repo
中找到更多说明
此 IMO 的最佳做法是使用 react-ga。
看看 github rep
您可以检查的另一个很棒的库是 redux-beacon。
它很容易与 react/redux 应用程序集成,并且有很好的文档。 ReactGA 也很好,但是使用 redux-beacon,你不会用 google 分析代码来混淆你的应用程序代码,因为它通过自己的中间件工作。
如果不使用包,我会这样做:
在你的index.js
中(在render
方法中):
{/* Global site tag (gtag.js) - Google Analytics */}
<script
async
src="https://www.googletagmanager.com/gtag/js?id=YOUR_TRACKING_ID"
/>
<script>{injectGA()}</script>
在class之外:
const injectGA = () => {
if (typeof window == 'undefined') {
return;
}
window.dataLayer = window.dataLayer || [];
function gtag() {
window.dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'YOUR_TRACKING_ID');
};
我建议将 Segment script 嵌入到您的 index.html
中,使用可在 window
对象上访问的分析库,并将跟踪调用添加到 React 的事件处理程序中:
export default class SignupButton extends Component {
trackEvent() {
window.analytics.track('User Signup');
}
render() {
return (
<button onClick={this.trackEvent}>
Signup with Segment today!
</button>
);
}
}
我是 https://github.com/segmentio/analytics-react 的维护者。如果您想通过使用一个单一的 API 来管理您的客户数据并能够集成到任何其他分析工具(我们支持超过 250 个目的地)而无需编写任何额外代码来解决这个问题,我建议您检查一下.
如果您不想使用包,这就是它在 React 应用程序中的工作方式。
在index.html
中添加"gtag"
<!-- index.html -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "<GA-PROPERTYID>");
</script>
在登录表单的提交动作中,触发事件
window.gtag("event", "login", {
event_category: "access",
event_label: "login"
});
正在查看 google 的网站 https://developers.google.com/analytics/devguides/collection/analyticsjs,
您还可以使用此功能添加 Google 分析:
const enableGA = () => {
!function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){
(A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g),
r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r)
}(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X');
ga('send', 'pageview');
}
这样您就不需要外部库,而且设置起来非常快。
使用 dangerouslySetInnerHTML
转义分析代码
首先,您当然必须将 header 代码共享到所有页面,例如如问:React js do common header
然后,这个 Next.js 答案 https://whosebug.com/a/24588369/895245 给出了一个很好的工作代码,应该也可以在 Next.js 之外工作。它使用 dangerouslySetInnerHTML
:
转义分析代码
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script>
<script
dangerouslySetInnerHTML={{
__html: `window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
`,
}}
/>
您应该将 UA-47867706-3
替换为您自己的代码。
此代码与 Google 给出的代码完全相同,但进行了以下修改:我们添加了:
{ page_path: window.location.pathname }
到 gtag('config'
以便它能够获得访问的路径,因为这是一个 JavaScript SPA。
这会在浏览器上生成所需的输出:
<script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
</script>
与 Google 给出的确切代码唯一不同的是 async=""
与 async
,但这两个在 HTML 中是等价的,因为它是布尔属性,另见:What's the proper value for a checked attribute of an HTML checkbox?
使用 dangerouslySetInnerHTML
进行转义是必要的,否则 React 会解释 script
JSX 中的代码并且失败:
Syntax error: Unexpected token, expected "}"
21 | <script>
22 | window.dataLayer = window.dataLayer || [];
> 23 | function gtag(){dataLayer.push(arguments);}
| ^
24 | gtag('js', new Date());
25 |
26 | gtag('config', 'UA-47867706-3');
我希望他们能自动为我们转义 script
里面的东西。
最后要获得页面切换,您还必须使用更多代码对其进行跟踪,请参见上面提到的 Next.js 答案示例。
相关:Adding script tag to React/JSX
在 React 17.0.2、next.js 10.2.2.
上测试
我正在尝试将 Google 分析添加到 React Web 应用程序。
我知道如何在 HTML/CSS/JS 站点中执行此操作,并且我也已将其集成到 AngularJS 应用程序中。但是,当涉及到反应时,我不太确定如何去做。
使用 HTML/CSS/JS,我刚刚将它添加到每个页面。
我对 AngularJS 所做的是将 GTM 和 GA 脚本添加到 index.html 并将 UA 标签添加到 HTML div(和按钮)以获得点击。
我如何使用 React 做到这一点?
请帮忙!
更新:2019 年 2 月
看到这个问题被很多人搜索,我决定展开我的解释。
要将 Google Analytics 添加到 React,我建议使用 React-GA.
添加 运行:
npm install react-ga --save
初始化:
在根组件中,通过 运行:
import ReactGA from 'react-ga';
ReactGA.initialize('Your Unique ID');
要报告页面浏览量:
ReactGA.pageview(window.location.pathname + window.location.search);
要报告自定义事件:
ReactGA.event({
category: 'User',
action: 'Sent message'
});
可以在 github repo
中找到更多说明此 IMO 的最佳做法是使用 react-ga。 看看 github rep
您可以检查的另一个很棒的库是 redux-beacon。
它很容易与 react/redux 应用程序集成,并且有很好的文档。 ReactGA 也很好,但是使用 redux-beacon,你不会用 google 分析代码来混淆你的应用程序代码,因为它通过自己的中间件工作。
如果不使用包,我会这样做:
在你的index.js
中(在render
方法中):
{/* Global site tag (gtag.js) - Google Analytics */}
<script
async
src="https://www.googletagmanager.com/gtag/js?id=YOUR_TRACKING_ID"
/>
<script>{injectGA()}</script>
在class之外:
const injectGA = () => {
if (typeof window == 'undefined') {
return;
}
window.dataLayer = window.dataLayer || [];
function gtag() {
window.dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'YOUR_TRACKING_ID');
};
我建议将 Segment script 嵌入到您的 index.html
中,使用可在 window
对象上访问的分析库,并将跟踪调用添加到 React 的事件处理程序中:
export default class SignupButton extends Component {
trackEvent() {
window.analytics.track('User Signup');
}
render() {
return (
<button onClick={this.trackEvent}>
Signup with Segment today!
</button>
);
}
}
我是 https://github.com/segmentio/analytics-react 的维护者。如果您想通过使用一个单一的 API 来管理您的客户数据并能够集成到任何其他分析工具(我们支持超过 250 个目的地)而无需编写任何额外代码来解决这个问题,我建议您检查一下.
如果您不想使用包,这就是它在 React 应用程序中的工作方式。 在index.html
中添加"gtag"<!-- index.html -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "<GA-PROPERTYID>");
</script>
在登录表单的提交动作中,触发事件
window.gtag("event", "login", {
event_category: "access",
event_label: "login"
});
正在查看 google 的网站 https://developers.google.com/analytics/devguides/collection/analyticsjs,
您还可以使用此功能添加 Google 分析:
const enableGA = () => {
!function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){
(A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g),
r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r)
}(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-XXXXXXXX-X');
ga('send', 'pageview');
}
这样您就不需要外部库,而且设置起来非常快。
使用 dangerouslySetInnerHTML
首先,您当然必须将 header 代码共享到所有页面,例如如问:React js do common header
然后,这个 Next.js 答案 https://whosebug.com/a/24588369/895245 给出了一个很好的工作代码,应该也可以在 Next.js 之外工作。它使用 dangerouslySetInnerHTML
:
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script>
<script
dangerouslySetInnerHTML={{
__html: `window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
`,
}}
/>
您应该将 UA-47867706-3
替换为您自己的代码。
此代码与 Google 给出的代码完全相同,但进行了以下修改:我们添加了:
{ page_path: window.location.pathname }
到 gtag('config'
以便它能够获得访问的路径,因为这是一个 JavaScript SPA。
这会在浏览器上生成所需的输出:
<script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-47867706-3"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-47867706-3', { page_path: window.location.pathname });
</script>
与 Google 给出的确切代码唯一不同的是 async=""
与 async
,但这两个在 HTML 中是等价的,因为它是布尔属性,另见:What's the proper value for a checked attribute of an HTML checkbox?
使用 dangerouslySetInnerHTML
进行转义是必要的,否则 React 会解释 script
JSX 中的代码并且失败:
Syntax error: Unexpected token, expected "}"
21 | <script>
22 | window.dataLayer = window.dataLayer || [];
> 23 | function gtag(){dataLayer.push(arguments);}
| ^
24 | gtag('js', new Date());
25 |
26 | gtag('config', 'UA-47867706-3');
我希望他们能自动为我们转义 script
里面的东西。
最后要获得页面切换,您还必须使用更多代码对其进行跟踪,请参见上面提到的 Next.js 答案示例。
相关:Adding script tag to React/JSX
在 React 17.0.2、next.js 10.2.2.
上测试