小编Céd*_*oem的帖子

React / Next.js 中 Google Optimize 的一般问题

标题可能看起来有点含糊,但这是因为我目前在将 Google Optimize 集成到我们的 React / Next.js 项目中时遇到了多个问题。我将尝试尽可能详细地解释我的问题和行动。但是,如果有不清楚的地方,请告诉我。

问题:

  1. 虽然头顶添加了谷歌优化,但我们总是会遇到页面闪退。这意味着用户首先看到我们的页面,然后什么都没有(异步隐藏功能启动),然后页面再次发生变化。
  2. 我创建了一个实验,可以重新排序导航链接、删除一个导航链接并更改我们的 CTA 文本。出于测试目的,我已将变体设置为 100%。会发生什么(与问题 1 相关),是我们首先看到我们的原始网页,然后是更改,然后又是我们删除了一个导航链接的原始网页。这意味着它添加了变体,但删除了一些更改。
  3. 在动态页面上添加实验时,无法应用更改。当我运行实验时,没有任何变化,当我重新打开可视化编辑器时,它说更改存在问题。即使更改只是简单的文本更改。

我试过的:

  1. 默认情况下在 html 上添加“异步隐藏”类名。这会将网页默认设置为隐藏。如果我使用 Google Optimize 同步,这很好用。但是,如果我将其设置为异步,则需要 1 到 2 秒才能显示页面,这不是很好的性能。
  2. 我按照谷歌在这里提到的确切步骤在谷歌标签管理器中添加了谷歌优化。是的,我确实将异步隐藏函数中的 Google Optimize 容器 ID 更改为 GTM 容器 ID。
  3. 我取消了上面的第 2 部分并像这样手动添加了 Google Optimize。
<Html lang="en" className="async-hide">
<Head>
  {/* 
    Google Optimize Ant-Flicker Snippet
    https://support.google.com/optimize/answer/9692472?ref_topic=6197443
  */}
  <style
    dangerouslySetInnerHTML={{
      __html: `.async-hide { opacity: 0 !important}`,
    }}
  />
  <script
    dangerouslySetInnerHTML={{
      __html: `
      (function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date;
      h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')};
      (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c;
      })(window,document.documentElement,'async-hide','dataLayer',4000,
      {'OPT-OPTIMIZE_ID':true});
    `,
    }}
  /> …
Run Code Online (Sandbox Code Playgroud)

google-tag-manager reactjs next.js google-optimize

17
推荐指数
1
解决办法
3482
查看次数

如何在获取请求期间显示 Axios 的进度(不是下载或上传)

我想要的是在 Axios 收到我的请求时显示一个进度条。axios包有onDownloadProgressonUploadProgress在下载或上传期间显示进度条,但在获取请求期间没有进度条。我搜索了很多问题和文章,但它们总是关于下载/上传进度或 Vue.js,我不明白如何在 React 中做到这一点。

我在下面有以下代码(这将不起作用,因为我没有下载)。

理想情况下,我会自己写;但是如果有人可以解释我如何将axios-progress 包loadProgressBar()与我的 Axios 请求集成,我愿意考虑使用axios-progress 包

request = () => {
    this.setState({error: null, results: []})
    axios({
        method: 'get',
        url: process.env.REACT_APP_API_LOCALS,
        responseType: 'json',
        onDownloadProgress: (progressEvent) => {
            var percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total);
            this.setState({
                loading: percentCompleted
            })
        },
    })
    .then(
        (response) => {
            console.log(response)
            this.setState({
                results: response.data.results,
                error: null,
                totalPages: Math.ceil(response.data.count / response.data.results.length)
            })  
        }
    )
    .catch(
        (error) => {
            this.setState({
                loading: …
Run Code Online (Sandbox Code Playgroud)

loading get-request reactjs axios

14
推荐指数
2
解决办法
2万
查看次数

React-google-maps:如何创建一个可点击的 kml 地图来显示 kml 的元数据?

编辑:根据指南,有一个名为 getMetadata() 的方法。我如何使用它来返回道具?

描述:

使用 React-google-maps 包,我已经能够使用自己的 kml 文件加载 Google 地图。该 KML 文件包含多个形状,每个形状背后都有元数据。我想要的是,当用户单击这些形状之一时,他会在弹出窗口中看到形状背后的数据。

例子

假设我有一个 Google 地图,其中包含显示两个国家/地区的 kml 文件。用户将鼠标悬停在这些国家/地区之一上,会看到一个弹出窗口,显示他所在的国家/地区。他将鼠标悬停在第二个国家上空并得到相同的结果。当他单击该国家/地区的 KML 形状时,他会收到更多信息。

这需要我了解一些事情:

- 如何在 KML 形状上创建悬停效果以显示基于形状的数据
- 如何在 KML 形状上创建单击事件以显示基于形状的数据

但是,我无法理解如何使这个 KML 文件具有交互性。
这是我到目前为止所拥有的:

import React, { Component } from 'react';
import { withScriptjs, withGoogleMap, GoogleMap, Marker, KmlLayer } from "react-google-maps"

const MyMapComponent = withScriptjs(withGoogleMap((props) =>
  <GoogleMap
    defaultZoom={8}
    defaultCenter={{ lat: 50.5010789, lng: 4.4764595 }}
  >
    <KmlLayer 
        url='https://example.be/kmlfile.kml'
        options={{ preserveViewport : false}}
    />
    {props.isMarkerShown && <Marker position={{ lat: 50.5010789, …
Run Code Online (Sandbox Code Playgroud)

methods google-maps kml reactjs react-google-maps

6
推荐指数
1
解决办法
6501
查看次数

如何从React.js中的另一个类组件调用方法

因此,我必须对组件进行分类:
Class1:具有一个单击按钮
Class2:具有一种调用我的api的方法

基本上,我想要的是调用一个方法来设置和编辑来自另一个类的一个类内的状态。但是我一直失败。

例:

Class1.js
export class Class1 extends Component {
   render() {
      return (
         <div onClick={must call Class2Method}></div>
      )
   }
}

Class2.js
export class Class2 extends Component {
   Class2Method(){
      Here I call my API, I set & call states, ...
   }
   render {
      return (
         <Class1 />
         Here I return my API content
      )    
   }   
}
Run Code Online (Sandbox Code Playgroud)

我试过的

  1. 我试图使用我的方法并在App.js(class2和class1的父级)中调用并设置状态。但是后来我的Class2.js控制台说找不到我的状态。
  2. 我也尝试过:在我的Class 2中使用<Class1 method = {this.Class2Method} />在Class1中使用<div onClick = {this.props.method}>。

methods components class reactjs

5
推荐指数
2
解决办法
2万
查看次数

根据开发环境分离 Google Analytics 数据

因此,我发现了一些类似的问题,但通常要么过时,不完全是我正在搜索的内容,要么他们不使用 Google 标签管理器,而是将标签写入<head>.

- - - - - -现在的情况- - - - - -

我们使用 Google 标签管理器在我们的网站上注入 Google Analytics 等标签。我们根据需要发生的情况使用多个标签;例如:

  • 跟踪页面
  • 跟踪特定点击
  • 跟踪登录或注册事件

所有数据都完美地传输至 Google Analytics

- - - - - -问题- - - - - -

但是,我们还从其他环境(例如localhost:3000或 )接收数据https://dev.ourdomain.com,这可能会导致数据不准确。

-----------我们想要的-----------

是一种分离数据的方法。通过以下任一方式:

  1. 将 Google Analytics 中的数据与生产(域 A)和开发中的数据(其他域)分开
  2. 在数据到达 Google Analytics 之前将其分离(就像我下面的建议)
  3. 或者也许还有其他建议

在第 1 点和第 2 点之间,我更喜欢第一种方式,因为这会将现有数据分为生产数据和开发数据。

-----------建议的解决方案-----------

我一直在考虑使用新的属性,然后使用 Google 跟踪代码管理器,我将根据当前域返回 Google Analytics 设置。生产才会回归UA-code-1、发展UA-code-2 …

development-environment google-analytics production-environment google-tag-manager

5
推荐指数
1
解决办法
2494
查看次数

无法访问 .env 中的变量键(dotenv package React)

所以我试图了解如何使用 .env 来保护我的登录身份验证的 api 密钥和数据。我遵循了 dotenv 包的过程和这里的 stackoverflow答案

我做了什么:

1. 我安装了 dotenv 包

2. 在我的根文件夹中,我添加了一个只有一行的 .env :

API_AUTH=http://myapilink.com
Run Code Online (Sandbox Code Playgroud)

3. 在我的 App.js 中,我添加了以下行:

require('dotenv').config()
console.log(process.env.API_AUTH)
Run Code Online (Sandbox Code Playgroud)

但是,console.log 返回 'undefined',这是为什么呢?我错过了什么?

authentication api environment-variables reactjs dotenv

3
推荐指数
1
解决办法
6096
查看次数

Npm 发布到私有范围不断失败

我最近创建了一个新组织,并采用付费计划来发布无限的私人包。

但是,每次我尝试将我的包发布到我的组织时,它都会给我以下错误:

npm ERR! publish Failed PUT 403
npm ERR! code E403
npm ERR! Forbidden : @myScopeName/myPackageName
Run Code Online (Sandbox Code Playgroud)

我已经注销,然后作为范围登录;像这样:

npm login scope=myScopeName
Run Code Online (Sandbox Code Playgroud)

然后返回以下内容

logged in as myUserName to scope @myScopeName on http://registry.npmjs.org/

我检查了我的.npmrc文件,我有以下几行:

registry=http://registry.npmjs.org/
scope=myScopeName
@myScopeName:registry=http://registry.npmjs.org
Run Code Online (Sandbox Code Playgroud)

但是我仍然无法发布我的包。有谁知道我是否忘记了其他事情,或者我是否根据上述内容做错了什么?

谢谢!

publish organization package npm npm-publish

2
推荐指数
1
解决办法
3656
查看次数

Requires capabilities : [CAPABILITY_IAM] 是什么意思,我该如何激活它?

按照有关 AWS 实例调度的教程,我能够创建一个新的 EC2instanceScheduler 云形成堆栈。

但是,每次我尝试更新该堆栈时,都会发生以下错误:

需要能力:[CAPABILITY_IAM]

我搜索了信息,但似乎找不到任何关于这是什么、这意味着什么以及如何激活它的明确信息。

在此页面上,亚马逊表示如下:

在某些情况下,您必须明确承认您的堆栈模板包含某些功能,以便 AWS CloudFormation 创建堆栈。

但我似乎无法理解如何以及在哪里。有人可以给我关于这个主题的明确信息吗?这个错误是什么意思,我该如何解决?

stack amazon-web-services aws-cloudformation

0
推荐指数
1
解决办法
332
查看次数