import { useCallback } from 'react'; import useChange from 'use-change'; type SliceRecord = SLICE & Partial>; type Key = keyof SLICE & string & KEY; export type ReturnTuple = [SLICE[KEY], (value: SLICE[Key]) => void]; export default function useItem( item: SliceRecord, key: Key, onChangeItem?: (item: SliceRecord, key: string) => void, ): ReturnTuple { const [, set] = useChange(item, key); const update = useCallback((value: SLICE[Key]) => { set(value); onChangeItem?.(item, key); }, [item, key, onChangeItem, set]); return [item[key], update]; }