UNPKG

@byndyusoft-ui/use-array

Version:
22 lines (21 loc) 1.25 kB
import { useCallback, useState } from 'react'; export default function useArray(initialValue) { const [list, setList] = useState(initialValue); const append = useCallback((item) => setList(previousList => [...previousList, item]), [setList]); const prepend = useCallback((item) => setList(previousList => [item, ...previousList]), [setList]); const update = useCallback((index, item) => setList(previousList => [ ...previousList.slice(0, index), item, ...previousList.slice(index + 1, previousList.length) ]), [setList]); const remove = useCallback((index) => setList(previousList => [ ...previousList.slice(0, index), ...previousList.slice(index + 1, previousList.length) ]), [setList]); const filter = useCallback((predicate) => setList(previousList => previousList.filter(predicate)), [setList]); const sort = useCallback((comparator) => setList(previousList => [...previousList].sort(comparator)), [setList]); const clear = useCallback(() => setList([]), [setList]); const reset = useCallback(() => setList(initialValue), [setList, initialValue]); const commands = { append, prepend, update, remove, filter, sort, clear, reset }; return [list, commands]; }