use-deep-compare-memo.ts 509 B

123456789101112131415161718
  1. import { DependencyList, useMemo, useRef } from 'react'
  2. import { isEqual } from 'lodash'
  3. function useDeepCompare(dependencies: DependencyList) {
  4. const ref = useRef<DependencyList>([])
  5. if (!isEqual(ref.current, dependencies)) {
  6. ref.current = dependencies
  7. }
  8. return ref.current
  9. }
  10. export default function useDeepCompareMemo<T>(
  11. factory: () => T,
  12. dependencies: DependencyList
  13. ) {
  14. // eslint-disable-next-line react-hooks/exhaustive-deps
  15. return useMemo(factory, useDeepCompare(dependencies))
  16. }