【问题标题】:Statsig - How to get true value from feature gate?Statsig - 如何从特征门获得真实价值?
【发布时间】:2021-11-05 20:36:03
【问题描述】:

我正在尝试在我的 react(Nextjs) 应用程序中实现 StatSig(Refer: https://docs.statsig.com/) 功能。我创建了新的功能门changeComponentUI,并且规则已添加为Environment Tier -> Any of - staging, development。从客户端我尝试将数据检索为const statsigFeatureOn = useGate('changecomponentui').value,在这里我总是得到false 值,即使它是ON。

在 app.js 中我已经初始化为,

<StatsigProvider
   sdkKey={"client-PsdasdASQW6556aIOPASASsqwewqeGSsad"}
   user={{ userId, }}
   options={{ environment: { tier: 'staging' } }}
   waitForInitialization={true}
 >
    <Component {...args} />
</StatsigProvider>

在浏览器的“网络”选项卡中,我得到了 -

请求有效载荷为,

{"user":{"userID":"","statsigEnvironment":{"tier":"staging"}},"statsigMetadata":{"sessionID":"433h67a3-416c-4914-82fd-e3c2b12f7n05","sdkType":"react-client","sdkVersion":"0.5.1","stableID":"8d122318-6d18-2322-889a-83c10e44e46"}}

输出是(预览),

{
"gates": {
    "+ZpxDXVQ/Rbhf02jl1Yv91VU+X+c0Gq/DZM+CmjPJgc=": false,
    "uwglh6w2Nas8RufxC82qrsVAohod9gsGpvaT6/1l7ts=": false,
    "sKSndsyjj+9MYUFlHPcdavbtA38g1+PjhofnyTDSxU8=": false,
    "w9AtEJ/+vqrqb1kh8KPvhN2Rd32mkwfR+gxvlesY4ac=": true,
    "gUZn3VlwEVdqBs7NcXGWHpBueNz0rlZGTufpLeB8Fug=": false
},
"feature_gates": {
    "+ZpxDXVQ/Rbhf02jl1Yv91VU+X+c0Gq/DZM+CmjPJgc=": {
        "name": "+ZpxDXVQ/Rbhf02jl1Yv91VU+X+c0Gq/DZM+CmjPJgc=",
        "value": false,
        "rule_id": "",
        "secondary_exposures": []
    },
    "uwglh6w2Nas8RufxC82qrsVAohod9gsGpvaT6/1l7ts=": {
        "name": "uwglh6w2Nas8RufxC82qrsVAohod9gsGpvaT6/1l7ts=",
        "value": false,
        "rule_id": "",
        "secondary_exposures": []
    },
    "sKSndsyjj+9MYUFlHPcdavbtA38g1+PjhofnyTDSxU8=": {
        "name": "sKSndsyjj+9MYUFlHPcdavbtA38g1+PjhofnyTDSxU8=",
        "value": false,
        "rule_id": "default",
        "secondary_exposures": []
    },
    "w9AtEJ/+vqrqb1kh8KPvhN2Rd32mkwfR+gxvlesY4ac=": {
        "name": "w9AtEJ/+vqrqb1kh8KPvhN2Rd32mkwfR+gxvlesY4ac=",
        "value": true,
        "rule_id": "6ZcQ0LOgAi2kSd5QgbtJzJ",
        "secondary_exposures": []
    },
    "gUZn3VlwEVdqBs7NcXGWHpBueNz0rlZGTufpLeB8Fug=": {
        "name": "gUZn3VlwEVdqBs7NcXGWHpBueNz0rlZGTufpLeB8Fug=",
        "value": false,
        "rule_id": "default",
        "secondary_exposures": []
    }
},
"configs": {},
"dynamic_configs": {},
"sdkParams": {},
"has_updates": true,
"time": 1631164754145
}

我怎样才能在这里获得真正的价值?同样在输出中有一个具有true 值的对象,但我没有得到它是针对哪个特征门的数据。

请帮我解决这个问题。

【问题讨论】:

  • 根据此链接,您将在第一次渲染期间始终为 false。 (docs.statsig.com/client/reactSDK#usage)。检查渲染期间变量发生了什么。
  • 我删除了 waitForInitialization 并尝试将其设为 false 并尝试仅返回 false。

标签: javascript reactjs next.js environment-variables statsig


【解决方案1】:

确保您使用的是控制台中的确切 ID。在这种情况下,如果功能名称是“ChangeComponentUI”但 id 是“changecomponentui”,您可能需要执行const statsigFeatureOn = useGate('changecomponentui').value。我相信目前所有的 ID 都是小写的,但也许驼峰大小写是不这样做的一个很好的理由(或者不区分大小写)

(编辑)在通过相同步骤创建门后,以下代码 sn-p 在 next.js 中适用于我:

import React from "react";
import { StatsigProvider, useGate } from "statsig-react";

export default function App(): JSX.Element {
  return (
      <StatsigProvider
        sdkKey={"client-(redacted)"}
        user={{ userID: "" }} // Fixed from userId, but since userID didn't matter both worked in this case
        options={{ environment: { tier: "staging" } }}
        waitForInitialization={true}
      >
        <TestComponent />
      </StatsigProvider>
  );
}

function TestComponent() {
  const statsigFeatureOn = useGate("changecomponentui").value;
  return <div>{String(statsigFeatureOn)}</div>;
}

【讨论】:

  • 即使我尝试过使用小写gate_name: changecomponentui,但它只是错误的。
  • 您还可以通过自己对名称进行哈希处理并查看它是否与您在网络选项卡中找到的任何门匹配来仔细检查您是否使用了正确的功能名称(例如crypto.createHash('sha256').update('changecomponentui').digest('base64') 给出@ 987654325@ 似乎不匹配。这绝对是控制台中显示的门名称吗?或者您的设置还有什么值得注意的地方吗?
猜你喜欢
  • 2018-08-06
  • 2019-08-25
  • 2022-07-31
  • 2015-08-02
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多