React如何获取函数组件返回值并在非组件appollo.js中使用Statsig变量
解决方案
React Hook 只能在 React 函数组件或自定义 Hook 内部调用,非组件的普通 JS 文件无法直接使用 useGate 获取开关值,你之前封装的 AbcComponent 无法拿到返回值,是因为组件返回的是 React 渲染元素,只能用于页面渲染,不能直接返回值给非组件的 JS 逻辑使用。
你可以通过以下两种可行方式在 apollo.js 中拿到Statsig开关值:
方案1:直接使用Statsig非Hook API(最推荐)
Statsig JS SDK 本身提供了不依赖 React Hook 的开关查询方法,不需要封装组件,直接在普通JS文件中调用即可:
// apollo.js中引入Statsig基础SDK import Statsig from 'statsig-js'; // 在需要用到开关的逻辑处调用 const yourApolloUtilFunction = () => { // 确保调用时Statsig已完成初始化,可加判断兜底 if (!Statsig.isInitialized()) return; const featureOn = Statsig.checkGate('abc'); // 后续根据featureOn处理Apollo相关逻辑:如动态配置请求头、切换请求链路等 }
如果你的Apollo初始化逻辑需要在页面加载阶段执行,可以把Apollo初始化逻辑放到Statsig初始化完成的回调中执行,避免出现开关查询未就绪的问题。
方案2:从上层组件传入开关值
如果你更习惯使用useGate Hook,可以在项目根组件中拿到开关值后,通过参数传递给apollo.js暴露的方法:
- 根组件调用Hook传值:
// 项目根组件App.js import { ApolloProvider } from '@apollo/client'; import { useGate } from '@statsig/react-bindings'; import { initApolloClient } from './apollo'; function App() { const featureOn = useGate('abc').value; // 初始化Apollo客户端时传入开关值 const apolloClient = initApolloClient(featureOn); return ( <ApolloProvider client={apolloClient}> {/* 其余业务组件 */} </ApolloProvider> ); }
- apollo.js中接收参数使用:
// apollo.js import { ApolloClient, InMemoryCache } from '@apollo/client'; export const initApolloClient = (featureOn) => { // 直接使用传入的featureOn处理逻辑 return new ApolloClient({ uri: featureOn ? '/new/api/graphql' : '/old/api/graphql', cache: new InMemoryCache(), // 其余Apollo配置 }); };
内容的提问来源于stack exchange,提问作者Shruthi R
相关产品推荐
相关产品推荐

