import { equals } from 'ramda'; import { type DependencyList, type ReactElement, useMemo, useRef } from 'react'; export const useDeepCompare = (value: DependencyList): Array => { const ref = useRef(undefined); const signalRef = useRef(0); if (!equals(value, ref.current)) { ref.current = value; signalRef.current += 1; } return [signalRef.current]; }; interface MemoComponent { Component: ReactElement; memoProps: Array; } export const useMemoComponent = ({ Component, memoProps }: MemoComponent): ReactElement => useMemo(() => Component, useDeepCompare(memoProps)); export default useMemoComponent;