UNPKG

react-accumulated-hook

Version:

React hook for accumulating data heap with following usage within delayed callback

33 lines (27 loc) 947 B
import { useCallback, useEffect, useState } from 'react'; import debounce from 'lodash/debounce'; export default function useAccumulated(props) { const { action, timeout = 1000, initialData = {} } = props; const [accumulatedChanges, setAccumulatedChanges] = useState(null); const [fields, setFields] = useState(initialData); const debouncedAction = useCallback( debounce((action, ...params) => { action(...params); setAccumulatedChanges(null); }, timeout), [] ); useEffect(() => { if (accumulatedChanges !== null) { debouncedAction(action, accumulatedChanges); } }, [accumulatedChanges]); const setField = useCallback((field, value) => { setAccumulatedChanges((prevAccumulatedChanges) => ({ ...prevAccumulatedChanges, [field]: value, })); setFields((prevFields) => ({ ...prevFields, [field]: value })); }, []); return [fields, accumulatedChanges, setField]; }