javascript - 如何从反应组件发出谷歌分析报告 API 请求?
问题描述
我正在尝试使用 React/Gatsby 和 Google Analytics Reporting API v4 构建分析仪表板。我已经在我的布局组件中包含了来自google api quickstart guide的脚本。
我知道它正在页面上加载,因为在浏览器开发人员工具控制台中我可以访问window.gapi
并且谷歌登录按钮正确显示。但是在我的页面组件中,我有一个 useEffect 挂钩。当组件安装时,我想使用window.gapi.client.request(...)
.
我尝试将请求包装在此:if (typeof window !== undefined) { ... }
根据gatsby 文档
布局.js
<Helmet>
<meta
name="google-signin-client_id"
content="MYCLIENTID"
/>
<meta
name="google-signin-scope"
content="https://www.googleapis.com/auth/analytics.readonly"
/>
<script src="https://apis.google.com/js/client:platform.js"></script>
</Helmet>
索引.js
useEffect(querySuccessfulSubmissions, [])
function querySuccessfulSubmissions() {
if (typeof window !== `undefined`) {
window.gapi.client
.request({
path: "/v4/reports:batchGet",
root: "https://analyticsreporting.googleapis.com/",
method: "POST",
body: {
reportRequests: [
{
viewId: "MYVIEWID",
samplingLevel: "LARGE",
dateRanges: [
{
startDate: "365daysAgo",
endDate: "yesterday",
},
],
metrics: [
{
expression: `ga:goal1Completions`,
alias: "",
},
],
dimensions: [
{
name: "ga:yearMonth",
},
],
},
],
},
})
.then(response => console.log('success'))
}
}
我希望可以从 useEffect 挂钩访问 window.gapi,但我得到了TypeError: window.gapi is undefined
.
解决方案
您可以尝试使用该setInterval
函数查看何时window.gapi
加载,然后在加载后将其清除:
useEffect(window.interval = setInterval(waitForAPI, 1000), [])
waitForAPI() {
if (window.gapi.client.request !== undefined) {
querySuccessfulSubmissions();
clearInterval( window.interval );
}
}
推荐阅读
- c# - 这个交易有效吗?ASP.NET 存储库模式
- python - 使用 end = ' , ' 打印值
- java - ArrayList 和 List 接口多态?
- security - nginx 安全链接重写 url (PHP)
- docker - 如何将 docker container .net core 3.1 连接到容器 sql server?
- azure-active-directory - 用户 ID 和密码无效。请再试一次。使用 Azure AD OBO 流
- r - 如何使用 theme_classic 函数在 ggplot2 中设置自定义颜色
- javascript - Fluture:如何使用 Monads 解决空处理问题
- reactjs - 将 getDerivedStateFromProps 更新为功能组件
- batch-file - 批处理文件比较运算符出错