diff --git a/src/analytics/features/index.ts b/src/analytics/features/index.ts index 81eb9eced0..afd2d2b089 100644 --- a/src/analytics/features/index.ts +++ b/src/analytics/features/index.ts @@ -16,7 +16,7 @@ setPolyfills({ return value != null ? JSON.parse(value) : null }, setItem: async (key, value) => { - CACHE.set(key, JSON.stringify(value)) + CACHE.set(key, value) }, }, }) diff --git a/src/analytics/index.tsx b/src/analytics/index.tsx index 3596464ebd..47e024ae88 100644 --- a/src/analytics/index.tsx +++ b/src/analytics/index.tsx @@ -180,6 +180,13 @@ export function AnalyticsFeaturesContext({ }) { const parentContext = useContext(Context) + /** + * Side-effect: we need to synchronously set this during the + * same render cycle. It does not trigger a re-render, it just + * sets properties on the singleton GrowthBook instance. + */ + setAttributes(parentContext.metadata) + useEffect(() => { feats.setTrackingCallback((experiment, result) => { parentContext.metric('experiment:viewed', { @@ -189,10 +196,6 @@ export function AnalyticsFeaturesContext({ }) }, [parentContext.metric]) - useEffect(() => { - setAttributes(parentContext.metadata) - }, [parentContext.metadata]) - const childContext = useMemo(() => { return { ...parentContext, diff --git a/src/lib/hooks/useIsBskyTeam.ts b/src/lib/hooks/useIsBskyTeam.ts index 13a71a443e..a0d504649d 100644 --- a/src/lib/hooks/useIsBskyTeam.ts +++ b/src/lib/hooks/useIsBskyTeam.ts @@ -4,5 +4,8 @@ import {useAnalytics} from '#/analytics' export function useIsBskyTeam() { const ax = useAnalytics() - return useMemo(() => ax.features.enabled(ax.features.IsBskyTeam), [ax]) + return useMemo( + () => ax.features.enabled(ax.features.IsBskyTeam), + [ax.features], + ) }