on master help sign in
fix: memo-construct array callbacks
18759a2Matt Condon (shrugs)
src/lib/useArray.js+24−15
@@ -6,23 +6,32 @@ import { useCallback, useState } from 'react';
6export default function useArray(initialItems = [], itemBuilder) {
6export default function useArray(initialItems = [], itemBuilder) {
7 const [items, _setItems] = useState(initialItems);
7 const [items, _setItems] = useState(initialItems);
8
8
9+ const append = useCallback(
9− const append = () => _setItems(items => [...items, itemBuilder()]);
10+ () => _setItems(items => [...items, itemBuilder()]),
11+ [_setItems, itemBuilder]
12+ );
10
13
11− const removeAt = i =>
14+ const removeAt = useCallback(
15+ i =>
12− _setItems(items => {
16+ _setItems(items => {
13− const newItems = [...items.slice(0, i), ...items.slice(i + 1)];
17+ const newItems = [...items.slice(0, i), ...items.slice(i + 1)];
14− return newItems;
18+ return newItems;
15− });
19+ }),
20+ [_setItems]
21+ );
16
22
17− const updateAt = (i, update = {}) =>
23+ const updateAt = useCallback(
24+ (i, update = {}) =>
18− _setItems(items => [
25+ _setItems(items => [
19− ...items.slice(0, i),
26+ ...items.slice(0, i),
20− {
27+ {
21− ...items[i],
28+ ...items[i],
22− ...update,
29+ ...update,
23− },
30+ },
24− ...items.slice(i + 1),
31+ ...items.slice(i + 1),
32+ ]),
33+ [_setItems]
25− ]);
34+ );
26
35
27 return [
36 return [
28 items,
37 items,