Skip to content

Commit 1dccb2c

Browse files
committed
Update useHistoryState and useList
1 parent 10f7de1 commit 1dccb2c

File tree

1 file changed

+47
-58
lines changed

1 file changed

+47
-58
lines changed

index.js

Lines changed: 47 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -336,38 +336,38 @@ const initialUseHistoryStateState = {
336336

337337
const useHistoryStateReducer = (state, action) => {
338338
const { past, present, future } = state;
339-
switch (action.type) {
340-
case "UNDO":
341-
return {
342-
past: past.slice(0, past.length - 1),
343-
present: past[past.length - 1],
344-
future: [present, ...future],
345-
};
346-
case "REDO":
347-
return {
348-
past: [...past, present],
349-
present: future[0],
350-
future: future.slice(1),
351-
};
352-
case "SET":
353-
const { newPresent } = action;
354339

355-
if (action.newPresent === present) {
356-
return state;
357-
}
340+
if (action.type === "UNDO") {
341+
return {
342+
past: past.slice(0, past.length - 1),
343+
present: past[past.length - 1],
344+
future: [present, ...future],
345+
};
346+
} else if (action.type === "REDO") {
347+
return {
348+
past: [...past, present],
349+
present: future[0],
350+
future: future.slice(1),
351+
};
352+
} else if (action.type === "SET") {
353+
const { newPresent } = action;
358354

359-
return {
360-
past: [...past, present],
361-
present: newPresent,
362-
future: [],
363-
};
364-
case "CLEAR":
365-
return {
366-
...initialUseHistoryStateState,
367-
present: action.initialPresent,
368-
};
369-
default:
370-
throw new Error("Unsupported action type");
355+
if (action.newPresent === present) {
356+
return state;
357+
}
358+
359+
return {
360+
past: [...past, present],
361+
present: newPresent,
362+
future: [],
363+
};
364+
} else if (action.type === "CLEAR") {
365+
return {
366+
...initialState,
367+
present: action.initialPresent,
368+
};
369+
} else {
370+
throw new Error("Unsupported action type");
371371
}
372372
};
373373

@@ -539,40 +539,29 @@ export function useIsFirstRender() {
539539
export function useList(defaultList = []) {
540540
const [list, setList] = React.useState(defaultList);
541541

542-
const methods = React.useMemo(() => {
543-
const set = (l) => {
544-
setList(l);
545-
};
546-
547-
const push = (element) => {
548-
setList((l) => [...l, element]);
549-
};
550-
551-
const removeAt = (index) => {
552-
setList((l) => [...l.slice(0, index), ...l.slice(index + 1)]);
553-
};
542+
const set = React.useCallback((l) => {
543+
setList(l);
544+
}, []);
554545

555-
const insertAt = (index, element) => {
556-
setList((l) => [...l.slice(0, index), element, ...l.slice(index)]);
557-
};
546+
const push = React.useCallback((element) => {
547+
setList((l) => [...l, element]);
548+
}, []);
558549

559-
const updateAt = (index, element) => {
560-
setList((l) => l.map((e, i) => (i === index ? element : e)));
561-
};
550+
const removeAt = React.useCallback((index) => {
551+
setList((l) => [...l.slice(0, index), ...l.slice(index + 1)]);
552+
}, []);
562553

563-
const clear = () => setList([]);
554+
const insertAt = React.useCallback((index, element) => {
555+
setList((l) => [...l.slice(0, index), element, ...l.slice(index)]);
556+
}, []);
564557

565-
return {
566-
set,
567-
push,
568-
removeAt,
569-
insertAt,
570-
updateAt,
571-
clear,
572-
};
558+
const updateAt = React.useCallback((index, element) => {
559+
setList((l) => l.map((e, i) => (i === index ? element : e)));
573560
}, []);
574561

575-
return [list, methods];
562+
const clear = React.useCallback(() => setList([]), []);
563+
564+
return [list, { set, push, removeAt, insertAt, updateAt, clear }];
576565
}
577566

578567
export function useLockBodyScroll() {

0 commit comments

Comments
 (0)