Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从react组件发出google analytics reporting API请求?_Javascript_Reactjs_Google Analytics Api_Gatsby_Use Effect - Fatal编程技术网

Javascript 如何从react组件发出google analytics reporting API请求?

Javascript 如何从react组件发出google analytics reporting API请求?,javascript,reactjs,google-analytics-api,gatsby,use-effect,Javascript,Reactjs,Google Analytics Api,Gatsby,Use Effect,我正在尝试使用React/Gatsby和Google analytics Reporting API v4构建一个分析仪表板。我已经将脚本包含在我的布局组件中 我知道它正在加载到页面上,因为在browser developer tools控制台中,我可以访问window.gapi,并且google登录按钮显示正确。但是在我的页面组件中,我有一个useEffect钩子。当组件装载时,我想使用window.gapi.client.request(…)发出请求 我尝试将请求包装在以下内容中:if(ty

我正在尝试使用React/Gatsby和Google analytics Reporting API v4构建一个分析仪表板。我已经将脚本包含在我的布局组件中

我知道它正在加载到页面上,因为在browser developer tools控制台中,我可以访问
window.gapi
,并且google登录按钮显示正确。但是在我的页面组件中,我有一个useEffect钩子。当组件装载时,我想使用
window.gapi.client.request(…)
发出请求

我尝试将请求包装在以下内容中:
if(typeof window!==undefined){…}
根据

Layout.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>

我希望可以从useEffect钩子访问window.gapi,但我得到
TypeError:window.gapi未定义

您可以尝试使用
setInterval
函数查看何时加载
window.gapi
,然后在加载后将其清除:

useffect(window.interval=setInterval(waitForAPI,1000),[])
waitForAPI(){
if(window.gapi.client.request!==未定义){
querySuccessfulSubmissions();
clearInterval(window.interval);
}
}
  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'))
    }
  }