Skip to content

Latest commit

 

History

History
42 lines (33 loc) · 1.11 KB

File metadata and controls

42 lines (33 loc) · 1.11 KB

Memoization Issues & Fix in useObjectVariationDetails hook

Problem

Object literals in React hooks create new references on every render, causing unnecessary re-computations:

// ❌ Bad: New object every render
useObjectVariationDetails('flag', { timeout: 5000, retries: 3 });

Impact

  • Unnecessary API calls to BKT client
  • Performance degradation
  • Memory pressure

Solution Applied

Fixed useObjectVariationDetails with deep equality memoization:

// Deep equality check for defaultValue
const memoizedDefaultValue = useMemo(() => defaultValue, [
  JSON.stringify(defaultValue)
]);

Usage Best Practices

// ✅ Good: Stable reference
const DEFAULT_CONFIG = { timeout: 5000, retries: 3 };
useObjectVariationDetails('flag', DEFAULT_CONFIG);

// ✅ Good: Memoized
const config = useMemo(() => ({ timeout: 5000, retries: 3 }), []);
useObjectVariationDetails('flag', config);

Test Coverage

Added memoization tests to verify:

  • Same object content doesn't trigger multiple client calls
  • Different content properly triggers re-evaluation
  • Stable references returned for identical content