react-sdk
react-sdk copied to clipboard
A `useEffect`'s within `useDecision` will flap the auto update listeners on every render.
This useEffect
will mount and execute on every single render. The root cause is that getCurrentDecision
in useDecision
is not wrapped in useCallback
like it is in the other hooks.
const getCurrentDecision: () => { decision: OptimizelyDecision } = () => ({
decision: optimizely.decide(flagKey, options.decideOptions, overrides.overrideUserId, overrideAttrs),
});
...
useEffect(() => {
// Subscribe to update after first datafile is fetched and readyPromise is resolved to avoid redundant rendering.
if (optimizely.getIsReadyPromiseFulfilled() && options.autoUpdate) {
return setupAutoUpdateListeners(optimizely, HookType.FEATURE, flagKey, hooksLogger, () => {
setState(prevState => ({
...prevState,
...getCurrentDecision(),
}));
});
}
return (): void => { };
}, [optimizely.getIsReadyPromiseFulfilled(), options.autoUpdate, optimizely, flagKey, getCurrentDecision]);