UNPKG

rsuite

Version:

A suite of react components

34 lines (33 loc) 1 kB
'use client'; import { useState, useEffect, useMemo } from 'react'; import { shallowEqual } from "../../internals/utils/index.js"; function useData(props) { const { controlledData = [], cacheData = [], onChange } = props; const [uncontrolledData, setData] = useState(controlledData); const [newData, setNewData] = useState([]); const data = useMemo(() => { return [].concat(uncontrolledData, newData); }, [newData, uncontrolledData]); const dataWithCache = useMemo(() => { return [].concat(data, cacheData); }, [data, cacheData]); // Update the state when the data in props changes useEffect(() => { if (controlledData && !shallowEqual(controlledData, uncontrolledData)) { setData(controlledData); setNewData([]); onChange === null || onChange === void 0 || onChange(controlledData); } }, [controlledData, uncontrolledData, onChange]); return { data, dataWithCache, newData, setNewData }; } export default useData;