使用决策钩
2023年5月11日大约 4 分钟
使用决策钩
本主题介绍 useDecision 钩子,它检索云眼灰度标帜(Feature Flag)AB实验 React SDK 的标帜键的决策结果。
版本
SDK v2.5 及更高版本
使用决策钩
检索标帜键的决策结果,可以选择根据基础用户、数据文件或强制决策更改自动更新该决策。
参数
| 论点 | 类型 | 描述 | 
|---|---|---|
| 标帜键(必填) | 字符串 | 灰度标帜的键 | 
| 选项(可选) | 对象 | 包括以下内容: autoUpdate(布尔值)- 如果为 true,则此挂钩将更新标帜决策以响应数据文件或用户更改。默认值:假。timeout(数字) - 客户端超时,如云眼提供程序部分所述。覆盖在祖先云眼提供程序上设置的任何超时。decideOptions(EyeofcloudDecideOption) - Array of EyeofcloudDecideOption enums.请参阅云眼决策选项。 | 
| 替代(可选) | 对象 | 包括以下内容: overrideUserId(字符串)- 覆盖要用于获取此挂钩的决策结果的 userId。overrideAttributes(云眼用户属性) - 覆盖用于获取此挂钩的决策结果的用户属性。 | 
返回
描述
标帜键(必填)
字符串
灰度标帜(Feature Flag)的键
选项(可选)
对象
包括以下内容:
 (布尔值)- 如果为 true,则此挂钩将更新标帜决策以响应数据文件或用户更改。默认值:假。
 (数字) - 客户端超时,如云眼提供程序部分所述。覆盖在祖先云眼提供程序上设置的任何超时。
 (EyeofcloudDecideOption) - Array of EyeofcloudDecideOption enums.请参阅云眼决策选项。autoUpdate``timeout``decideOptions
替代(可选)
对象
包括以下内容:
 (字符串)- 覆盖要用于获取此挂钩的决策结果的 userId。
 (优化。用户属性) - 覆盖用于获取此挂钩的决策结果的用户属性。 overrideUserId``overrideAttributes
返回以下数组:
| 键(Key) | 类型 | 描述 | 
|---|---|---|
| 决定 | 云眼决策 | 标帜键的决策结果。 | 
| 客户端就绪 | 布尔 | 指示 ReactSDK 实例是否已准备就绪 | 
| 确实超时 | 布尔 | 指示 ReactSDKClient 实例是否在允许的超时范围内准备就绪。 注意:clientReady 可以是真的,即使 didTimeout 也是真的。这表示客户端在超时期限后准备就绪。 | 
例
以下示例演示如何使用 useDecision 挂钩根据返回的标帜决策呈现某些内容:
React
import { useEffect } from 'react'; 
import { useDecision } from '@eyeofcloud/react-sdk';  
function LoginComponent() {   
    const [decision, clientReady] = useDecision(     
        'flag1',     
        { autoUpdate: true },     
        {       
            /* (Optional) User overrides */     
        }   
    );   
    useEffect(() => {     
        document.title = decision.enabled ? 'New Feature flag' : 'Old Feature flag';   
    }, [decision]);    
    
    return (     
        <p>       
            <a href={decision.variationKey === 'login1' ? '/login' : '/login2'}>Click to login</a>     
        </p>   
    ); 
}云眼分桶结果 EyeofcloudDecision选项
以下示例显示了如何在useDecision挂钩上单独设置选项,或在实例化 Eyeofcloud 客户端时将其设置为全局默认值。请参见初始化软件开发工具包。
React
import { useEffect } from 'react'; i
mport {   
    createInstance,   
    EyeofcloudProvider,   
    useDecision,   
    EyeofcloudDecideOption, 
} from '@eyeofcloud/react-sdk';  
// Instantiate an Eyeofcloud client 
const eyeofcloudClient = createInstance({   
    sdkKey: '<Your_SDK_Key>',   
    defaultDecideOptions: [EyeofcloudDecideOption.DISABLE_DECISION_EVENT], 
});  
function LoginComponent() {   
    const [decision, clientReady] = useDecision(     
        'flag1',     
        {       
            autoUpdate: true,       
            decideOptions: [         
                EyeofcloudDecideOption.ENABLED_FLAGS_ONLY,         
                EyeofcloudDecideOption.IGNORE_USER_PROFILE_SERVICE,       
            ],     
        },     
        {       
            /* (Optional) User overrides */     
        }   
    );   
    useEffect(() => {     
        document.title = decision.enabled ? 'New Feature flag' : 'Old Feature flag';   
    }, [decision]);    
    
    return (     
        <p>       
        <a href={decision.variationKey === 'login1' ? '/login' : '/login2'}>Click to login</a>     
        </p>   
    ); 
}  
function App() {   
    return (     
        <EyeofcloudProvider eyeofcloud={eyeofcloudClient} user={{ id: 'user123' }}>       
        <LoginComponent />     
        </EyeofcloudProvider>   
    ); 
}下表显示了云眼决策选项的详细信息。
| 云眼分桶结果 EyeofcloudDecision选项枚举 | 如果设置: | 
|---|---|
| EyeofcloudDecideOption.DISABLE_DECISION_EVENT | 防止访问者在仍获得变体的同时触发展示,这将禁止在 Eyeofcloud 应用程序的“结果”页面上显示 Decide 方法的结果。 此设置可能是为什么决策事件调度枚举在返回的 false EyeofcloudDecision对象或 DECIDE 通知侦听器有效负载。 | 
| EyeofcloudDecideOption.ENABLED_FLAGS_ONLY | 仅返回已启用标帜的决策。此选项仅适用于确定多个标帜的方法,如 Decide All 方法。如果此选项无效,则忽略此选项。如果未设置此选项,SDK 将返回所有决策,无论是否启用该标帜。EyeofcloudDecideOption.IGNORE_USER_PROFILE_SERVICE设置后,SDK 会绕过 UPS(查找和保存)进行决策。 如果未设置此选项,UPS 将覆盖受众定位、流量分配和实验互斥组。EyeofcloudDecideOption.INCLUDE_REASONS在 EyeofcloudDecision 对象的“原因”字段中返回日志消息。请注意,与信息或调试消息不同,无论此设置如何,始终返回严重错误消息。EyeofcloudDecideOption.EXCLUDE_VARIABLES从决策结果中排除标记变量值。使用此选项可通过跳过大型 JSON 变量来最小化返回的决策。 |