@byndyusoft-ui/use-array
Version:
Byndyusoft UI useArray React Hook
22 lines (21 loc) • 1.25 kB
JavaScript
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];
}