mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
build(store): build26 from 45504a2b
This commit is contained in:
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
import { shallowEqual } from "../../core/shallow-equal.js";
|
||||
import { useRef, useSyncExternalStore } from "react";
|
||||
//#region src/react/hooks/use-selector.ts
|
||||
/**
|
||||
* Subscribe to derived state with customizable equality check.
|
||||
*
|
||||
* Low-level hook used internally by `useStore` and `useSnapshot`.
|
||||
*
|
||||
* @param subscribe - Subscribe function that returns an unsubscribe callback.
|
||||
* @param getSnapshot - Returns the current snapshot value.
|
||||
* @param selector - Derives a value from the snapshot.
|
||||
* @param isEqual - Custom equality function. Defaults to `shallowEqual`.
|
||||
*/
|
||||
function useSelector(subscribe, getSnapshot, selector, isEqual = shallowEqual) {
|
||||
const cache = useRef(void 0);
|
||||
const getSelectedSnapshot = () => {
|
||||
const next = selector(getSnapshot());
|
||||
if (cache.current !== void 0 && isEqual(cache.current, next)) return cache.current;
|
||||
cache.current = next;
|
||||
return next;
|
||||
};
|
||||
return useSyncExternalStore(subscribe, getSelectedSnapshot, getSelectedSnapshot);
|
||||
}
|
||||
//#endregion
|
||||
export { useSelector };
|
||||
|
||||
//# sourceMappingURL=use-selector.js.map
|
||||
Reference in New Issue
Block a user