UNPKG

@wener/console

Version:
71 lines (70 loc) 2.31 kB
function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } import { createElement, createContext as reactCreateContext, useContext, useMemo, useRef } from 'react'; import { useStore } from 'zustand'; /** * v4 移除 * * @see https://github.com/pmndrs/zustand/discussions/1180 */ export function createStoreContext() { var ZustandContext = reactCreateContext(undefined); var Provider = function(param) { var createStore = param.createStore, children = param.children; var storeRef = useRef(undefined); if (!storeRef.current) { storeRef.current = createStore(); } return createElement(ZustandContext.Provider, { value: storeRef.current }, children); }; var useContextStore = function(selector, equalityFn) { var store = useContext(ZustandContext); if (!store) { throw new Error('Seems like you have not used zustand provider as an ancestor.'); } return useStore(store, selector); }; var useStoreApi = function() { var store = useContext(ZustandContext); if (!store) { throw new Error('Seems like you have not used zustand provider as an ancestor.'); } return useMemo(function() { return _object_spread({}, store); }, [ store ]); }; return { Provider: Provider, useStore: useContextStore, useStoreApi: useStoreApi }; }