zustand-kit 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -13
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/package.json +1 -1
- package/types/index.d.ts +14 -14
package/README.md
CHANGED
|
@@ -108,26 +108,22 @@ function Settings() {
|
|
|
108
108
|
|
|
109
109
|
### Redux DevTools 集成
|
|
110
110
|
|
|
111
|
-
在开发环境下,所有全局状态会自动集成到统一的 Redux DevTools
|
|
111
|
+
在开发环境下,所有全局状态会自动集成到统一的 Redux DevTools 视图中,便于调试。DevTools 采用全局配置,默认根据环境变量自动启用/禁用:
|
|
112
112
|
|
|
113
113
|
```tsx
|
|
114
|
-
import { useGlobalState } from 'zustand-kit';
|
|
114
|
+
import { useGlobalState, configureDevtools } from 'zustand-kit';
|
|
115
115
|
|
|
116
|
-
//
|
|
116
|
+
// 默认行为:开发环境自动启用,生产环境自动禁用
|
|
117
117
|
const [data, setData] = useGlobalState('data', { count: 0 });
|
|
118
118
|
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
enableDevtools: false
|
|
122
|
-
});
|
|
119
|
+
// 全局禁用 DevTools(在应用入口配置)
|
|
120
|
+
configureDevtools(false);
|
|
123
121
|
|
|
124
|
-
//
|
|
125
|
-
|
|
126
|
-
enableDevtools: true
|
|
127
|
-
});
|
|
122
|
+
// 全局启用 DevTools(在应用入口配置,如在生产环境调试,不推荐)
|
|
123
|
+
configureDevtools(true);
|
|
128
124
|
```
|
|
129
125
|
|
|
130
|
-
**注意:** 所有全局状态会聚合到一个名为 `GlobalStates (All)` 的 DevTools 实例中,每个状态以其 key
|
|
126
|
+
**注意:** 所有全局状态会聚合到一个名为 `GlobalStates (All)` 的 DevTools 实例中,每个状态以其 key 作为属性显示,方便统一查看和调试所有状态。建议在应用入口处调用 `configureDevtools()` 进行全局配置。
|
|
131
127
|
|
|
132
128
|
### 选择器模式(性能优化)
|
|
133
129
|
|
|
@@ -242,12 +238,27 @@ resetGlobalState('counter');
|
|
|
242
238
|
- `options?: UseGlobalStateOptions` - 可选配置
|
|
243
239
|
- `storage?: 'localStorage' | 'sessionStorage' | 'none'` - 持久化类型(默认 'none')
|
|
244
240
|
- `storageKey?: string` - 存储键前缀(默认 'global-state')
|
|
245
|
-
- `enableDevtools?: boolean` - 是否启用 Redux DevTools(开发环境默认 true,生产环境默认 false)
|
|
246
241
|
|
|
247
242
|
**返回:** `[state, setState, resetState]`
|
|
248
243
|
|
|
249
244
|
**注意:** 对于对象类型的状态,`setState` 支持部分更新。例如:`setUser({ name: 'Jane' })` 只会更新 `name` 字段,其他字段保持不变。
|
|
250
245
|
|
|
246
|
+
### `configureDevtools(enabled)`
|
|
247
|
+
|
|
248
|
+
全局配置 Redux DevTools 集成。
|
|
249
|
+
|
|
250
|
+
**参数:**
|
|
251
|
+
- `enabled: boolean` - 是否启用 Redux DevTools(默认:开发环境 true,生产环境 false)
|
|
252
|
+
|
|
253
|
+
**使用示例:**
|
|
254
|
+
```typescript
|
|
255
|
+
import { configureDevtools } from 'zustand-kit';
|
|
256
|
+
|
|
257
|
+
// 在应用入口处配置
|
|
258
|
+
configureDevtools(false); // 禁用 DevTools
|
|
259
|
+
configureDevtools(true); // 启用 DevTools
|
|
260
|
+
```
|
|
261
|
+
|
|
251
262
|
### `useGlobalSelector<T, R>(key, selector, equalityMode?)`
|
|
252
263
|
|
|
253
264
|
使用选择器订阅状态的特定部分。支持自动检测返回值类型并选择合适的比较模式。
|
package/dist/index.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }var R=Object.defineProperty,E=Object.defineProperties;var N=Object.getOwnPropertyDescriptors;var G=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var A=(e,t,o)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,g=(e,t)=>{for(var o in t||(t={}))O.call(t,o)&&A(e,o,t[o]);if(G)for(var o of G(t))D.call(t,o)&&A(e,o,t[o]);return e},U=(e,t)=>E(e,N(t));var _react = require('react'); var x = _interopRequireWildcard(_react);var _zustand = require('zustand');var _middleware = require('zustand/middleware');var _shallow = require('zustand/react/shallow');var s=new Map,c=process.env.NODE_ENV!=="production";function X(e){c=e}var i=null;function C(){return i||(i=_zustand.create.call(void 0, )(_middleware.devtools.call(void 0, ()=>({}),{name:"GlobalStates (All)"}))),i}function T(e,t){if(i){let o=i.getState();i.setState(U(g({},o),{[e]:t}))}}function Y(){s.clear(),i=null}function k(e,t,o){let{storage:n="none",storageKey:u="global-state"}=o||{};if(!s.has(e)){let f=typeof t=="object"&&t!==null&&!Array.isArray(t),h=(S,K)=>({value:t,setValue:l=>{typeof l=="function"?S(v=>{let p=l(v.value);return c&&T(e,p),{value:p}}):f&&typeof l=="object"&&l!==null?S(v=>{let p=g(g({},v.value),l);return c&&T(e,p),{value:p}}):(S({value:l}),c&&T(e,l))},reset:()=>{S({value:t}),c&&T(e,t)}}),d;if(n!=="none"){let S=n==="localStorage"?localStorage:sessionStorage;d=_zustand.create.call(void 0, )(_middleware.persist.call(void 0, h,{name:`${u}-${e}`,storage:_middleware.createJSONStorage.call(void 0, ()=>S)}))}else d=_zustand.create.call(void 0, h);s.set(e,d),c&&(C(),T(e,t))}let r=s.get(e),a=r(f=>f.value),V=_react.useMemo.call(void 0, ()=>f=>r.getState().setValue(f),[r]),B=_react.useMemo.call(void 0, ()=>()=>r.getState().reset(),[r]);return[a,V,B]}function Z(e,t,o){let n=s.get(e);if(!n)throw new Error(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);let u=_react.useRef.call(void 0, t);_react.useEffect.call(void 0, ()=>{u.current=t});let r=_react.useCallback.call(void 0, a=>u.current(a.value),[]);if(o===void 0){let a=r(n.getState());return a!==null&&typeof a=="object"&&!x.isValidElement(a)?n(_shallow.useShallow.call(void 0, r)):n(r)}return n(o==="shallow"?_shallow.useShallow.call(void 0, r):r)}function q(e){let t=s.get(e);if(!t)throw new Error(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return _react.useMemo.call(void 0, ()=>o=>t.getState().setValue(o),[t])}function ee(e){let t=s.get(e);return t==null?void 0:t.getState().value}function te(e,t){let o=s.get(e);if(!o){process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return}o.getState().setValue(t)}function oe(e,t){let o=s.get(e);if(!o)return process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`),()=>{};let n=o.getState().value;return o.subscribe(u=>{let r=u.value;Object.is(r,n)||(t(r,n),n=r)})}function re(e){let t=s.get(e);if(!t){process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return}t.getState().reset()}var ne=k;exports.__clearAllStates__ = Y; exports.configureDevtools = X; exports.default = ne; exports.getGlobalState = ee; exports.resetGlobalState = re; exports.setGlobalState = te; exports.subscribeGlobalState = oe; exports.useGlobalSelector = Z; exports.useGlobalSetter = q; exports.useGlobalState = k;
|
package/dist/index.esm.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var R=Object.defineProperty,E=Object.defineProperties;var N=Object.getOwnPropertyDescriptors;var G=Object.getOwnPropertySymbols;var O=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var A=(e,t,o)=>t in e?R(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,g=(e,t)=>{for(var o in t||(t={}))O.call(t,o)&&A(e,o,t[o]);if(G)for(var o of G(t))D.call(t,o)&&A(e,o,t[o]);return e},U=(e,t)=>E(e,N(t));import*as x from"react";import{create as w}from"zustand";import{persist as _,createJSONStorage as $,devtools as I}from"zustand/middleware";import{useMemo as b,useRef as j,useCallback as y,useEffect as z}from"react";import{useShallow as m}from"zustand/react/shallow";var s=new Map,c=process.env.NODE_ENV!=="production";function X(e){c=e}var i=null;function C(){return i||(i=w()(I(()=>({}),{name:"GlobalStates (All)"}))),i}function T(e,t){if(i){let o=i.getState();i.setState(U(g({},o),{[e]:t}))}}function Y(){s.clear(),i=null}function k(e,t,o){let{storage:n="none",storageKey:u="global-state"}=o||{};if(!s.has(e)){let f=typeof t=="object"&&t!==null&&!Array.isArray(t),h=(S,K)=>({value:t,setValue:l=>{typeof l=="function"?S(v=>{let p=l(v.value);return c&&T(e,p),{value:p}}):f&&typeof l=="object"&&l!==null?S(v=>{let p=g(g({},v.value),l);return c&&T(e,p),{value:p}}):(S({value:l}),c&&T(e,l))},reset:()=>{S({value:t}),c&&T(e,t)}}),d;if(n!=="none"){let S=n==="localStorage"?localStorage:sessionStorage;d=w()(_(h,{name:`${u}-${e}`,storage:$(()=>S)}))}else d=w(h);s.set(e,d),c&&(C(),T(e,t))}let r=s.get(e),a=r(f=>f.value),V=b(()=>f=>r.getState().setValue(f),[r]),B=b(()=>()=>r.getState().reset(),[r]);return[a,V,B]}function Z(e,t,o){let n=s.get(e);if(!n)throw new Error(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);let u=j(t);z(()=>{u.current=t});let r=y(a=>u.current(a.value),[]);if(o===void 0){let a=r(n.getState());return a!==null&&typeof a=="object"&&!x.isValidElement(a)?n(m(r)):n(r)}return n(o==="shallow"?m(r):r)}function q(e){let t=s.get(e);if(!t)throw new Error(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return b(()=>o=>t.getState().setValue(o),[t])}function ee(e){let t=s.get(e);return t==null?void 0:t.getState().value}function te(e,t){let o=s.get(e);if(!o){process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return}o.getState().setValue(t)}function oe(e,t){let o=s.get(e);if(!o)return process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`),()=>{};let n=o.getState().value;return o.subscribe(u=>{let r=u.value;Object.is(r,n)||(t(r,n),n=r)})}function re(e){let t=s.get(e);if(!t){process.env.NODE_ENV!=="production"&&console.warn(`Global state with key "${e}" not found. Initialize it with useGlobalState first.`);return}t.getState().reset()}var ne=k;export{Y as __clearAllStates__,X as configureDevtools,ne as default,ee as getGlobalState,re as resetGlobalState,te as setGlobalState,oe as subscribeGlobalState,Z as useGlobalSelector,q as useGlobalSetter,k as useGlobalState};
|
package/package.json
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure global DevTools integration
|
|
3
|
+
* @param enabled - Whether to enable Redux DevTools integration for all global states
|
|
4
|
+
* @example
|
|
5
|
+
* // Disable DevTools in development
|
|
6
|
+
* configureDevtools(false);
|
|
7
|
+
*
|
|
8
|
+
* // Enable DevTools in production (not recommended)
|
|
9
|
+
* configureDevtools(true);
|
|
10
|
+
*/
|
|
11
|
+
export declare function configureDevtools(enabled: boolean): void;
|
|
1
12
|
/**
|
|
2
13
|
* Clear all global states (for testing purposes)
|
|
3
14
|
* @internal
|
|
@@ -25,11 +36,6 @@ export interface UseGlobalStateOptions {
|
|
|
25
36
|
* @default 'global-state'
|
|
26
37
|
*/
|
|
27
38
|
storageKey?: string;
|
|
28
|
-
/**
|
|
29
|
-
* Enable Redux DevTools integration (aggregated view only)
|
|
30
|
-
* @default true in development, false in production
|
|
31
|
-
*/
|
|
32
|
-
enableDevtools?: boolean;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
41
|
* Universal global state hook - supports both simple values and objects
|
|
@@ -66,15 +72,9 @@ export interface UseGlobalStateOptions {
|
|
|
66
72
|
* storageKey: 'my-app'
|
|
67
73
|
* });
|
|
68
74
|
*
|
|
69
|
-
* //
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* });
|
|
73
|
-
*
|
|
74
|
-
* // Force enable aggregated DevTools in production (not recommended)
|
|
75
|
-
* const [debugData, setDebugData] = useGlobalState('debug', {}, {
|
|
76
|
-
* enableDevtools: true
|
|
77
|
-
* });
|
|
75
|
+
* // Configure DevTools globally (before creating states)
|
|
76
|
+
* import { configureDevtools } from 'zustand-kit';
|
|
77
|
+
* configureDevtools(false); // Disable DevTools
|
|
78
78
|
*
|
|
79
79
|
* // For non-React usage, see: getGlobalState, setGlobalState, subscribeGlobalState, resetGlobalState
|
|
80
80
|
*/
|