You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GrowthBook useFeature()偶返回defaultValue而非experiment问题求助

问题原因分析

以下是导致feature.source返回defaultValue而非预期experiment的常见原因:

1. 特性加载与组件渲染的时序问题

fetch(FEATURES_ENDPOINT)是异步操作,页面的page.js组件可能在远程特性数据返回前就完成了初始渲染,此时useFeature还未获取到配置的实验规则,只能返回默认值。

2. 用户属性设置时机错误

当前代码中,growthbook.setAttributes()在fetch请求外部同步执行,而growthbook.setFeatures()是在fetch回调中异步执行的。这意味着特性设置完成时,用户属性可能还未生效,GrowthBook无法根据属性匹配实验规则,最终 fallback 到默认值。

3. 实验规则的受众条件不匹配

检查GrowthBook后台配置的stroke-care_page实验规则:

  • 确认规则中的受众条件(如用户属性、设备信息等)是否和代码中setAttributes传入的参数完全匹配
  • 如果当前用户的属性不符合实验规则设置的分组条件,就会返回默认值

4. DevMode的干扰

你开启了enableDevMode: true,开发模式下GrowthBook可能会保留本地缓存的特性值,或允许手动强制切换特性状态,这可能导致实验规则未被正确应用。

5. 实验未发布或配置有误

  • 确认GrowthBook后台的stroke-care_page特性实验是否已正式发布
  • 检查实验的两条规则是否配置了正确的50%-50%流量占比,且没有优先级更高的规则覆盖当前实验

代码优化建议

针对时序和属性设置问题,调整fetchData逻辑,确保属性先设置完成再加载特性:

const fetchData = async () => {
  const machine_id = getMachineId()
  // 先设置用户属性
  growthbook.setAttributes({
    id: "user",
    loggedIn: true,
    deviceId: machine_id,
    employee: true,
    company: "ABC",
    browser: navigator.userAgent
  });
  // 再加载特性数据
  const res = await fetch(FEATURES_ENDPOINT);
  const json = await res.json();
  growthbook.setFeatures(json.features);
}

同时在page.js中增加加载状态判断,避免过早处理默认值:

const feature = useFeature("stroke-care_page");

useEffect(() => { 
  // 特性加载完成且来自实验时再更新内容
  if (feature.loaded && feature.source === "experiment") {
    setGrowthbookContent(feature.value)           
  }
}, [feature.loaded, feature.source])

内容的提问来源于stack exchange,提问作者Vishnu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:07:18