diff --git a/src/hooks/useTreatment.ts b/src/hooks/useTreatment.ts index 7a5fdd9..02011b7 100644 --- a/src/hooks/useTreatment.ts +++ b/src/hooks/useTreatment.ts @@ -4,12 +4,19 @@ import { useABSmartly } from "./useABSmartly"; export const useTreatment = (name: string, peek = false) => { const { context } = useABSmartly(); - const [variant, setVariant] = useState(null); - const [loading, setLoading] = useState(true); + const isReady = context != null && context.isReady(); + + const [variant, setVariant] = useState( + isReady ? (peek ? context.peek(name) : context.treatment(name)) : null, + ); + const [loading, setLoading] = useState(context == null || !context.isReady()); const [error, setError] = useState(null); useEffect(() => { + if (variant != null) return; + const fetchTreatment = async () => { + if (context == null) return; try { await context.ready(); const treatment = peek ? context.peek(name) : context.treatment(name); diff --git a/tests/useTreatment.test.ts b/tests/useTreatment.test.ts index 16f29da..5d45a78 100644 --- a/tests/useTreatment.test.ts +++ b/tests/useTreatment.test.ts @@ -20,6 +20,7 @@ const mockContext = { ready: vi.fn(), peek: vi.fn(), treatment: vi.fn(), + isReady: vi.fn(), }; beforeEach(() => {