next-with-zustand
Version:
Create Zustand with Provider
61 lines (57 loc) • 1.88 kB
JavaScript
import React, { createContext, useRef, useContext } from 'react';
import { createStore, useStore } from 'zustand';
function _extends() {
_extends = Object.assign ? Object.assign.bind() : function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
var createProvider = function createProvider() {
return function (initializer) {
var initializeStore = function initializeStore(initialState) {
return createStore()(function () {
var initStore = initializer.apply(void 0, arguments);
var initState = typeof initialState === 'function' ? initialState(initStore) : initialState;
return _extends({}, initStore, initState);
});
};
var ZustandContext = createContext(null);
var StoreProvider = function StoreProvider(_ref) {
var children = _ref.children,
initialState = _ref.initialState;
var storeRef = useRef();
if (!storeRef.current) {
storeRef.current = initializeStore(initialState);
}
return React.createElement(ZustandContext.Provider, {
value: storeRef.current
}, children);
};
var useStore$1 = function useStore$1(selector) {
if (selector === void 0) {
selector = function selector(state) {
return state;
};
}
var store = useContext(ZustandContext);
if (!store) {
throw new Error('Store is missing the provider');
}
return useStore(store, selector);
};
return {
Provider: StoreProvider,
useStore: useStore$1
};
};
};
export { createProvider };
//# sourceMappingURL=index.modern.js.map