refactor(ui): useZustandShallowSelector

This commit is contained in:
Fu Diwei
2024-12-24 15:07:39 +08:00
parent 52d24ff2f2
commit 8b1ae309fb
51 changed files with 194 additions and 269 deletions

View File

@@ -1,3 +1,4 @@
import useBrowserTheme from "./useBrowserTheme";
import useZustandShallowSelector from "./useZustandShallowSelector";
export { useBrowserTheme };
export { useBrowserTheme, useZustandShallowSelector };

View File

@@ -1,5 +1,5 @@
import { useTheme } from "ahooks";
export default () => {
export default function () {
return useTheme({ localStorageKey: "certimate-ui-theme" });
};
}

View File

@@ -0,0 +1,18 @@
import { pick, isArray } from "radash";
import { useRef } from "react";
import { shallow } from "zustand/shallow";
type MaybeMany<T> = T | readonly T[];
export default function <T extends object, TKeys extends keyof T>(paths: MaybeMany<TKeys>): (state: T) => Pick<T, TKeys> {
const prev = useRef<Pick<T, TKeys>>({} as Pick<T, TKeys>);
return (state: T) => {
if (state) {
const next = pick(state, isArray(paths) ? paths : [paths]);
return shallow(prev.current, next) ? prev.current : (prev.current = next);
}
return prev.current;
};
}