@shopbb/helium 0.6.0 → 0.6.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOptimisticCart.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"useOptimisticCart.d.ts","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,aAAa,CAAC;IACnD,MAAM,EAAE,GAAG,CAAC;CACb;AAmCD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,IAAI,CAGxE;AAMD,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,GAAG,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,GAAG,GAAG;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACrD,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7E,UAAU,EAAE,KAAK,GAAG,IAAI,GACvB,KAAK,GAAG,IAAI,CAmFd"}
|
|
@@ -20,19 +20,27 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import * as React from 'react';
|
|
22
22
|
import { useCartOptional } from '../CartProvider';
|
|
23
|
+
// 关键:snapshot 必须是稳定引用,否则 useSyncExternalStore 每次比对都觉得变了 →
|
|
24
|
+
// 无限 re-render(React #185)+ hydration mismatch(#418/#423)
|
|
25
|
+
const EMPTY_SNAPSHOT = [];
|
|
23
26
|
const pendingStore = {
|
|
24
27
|
items: new Map(),
|
|
25
28
|
listeners: new Set(),
|
|
29
|
+
cachedSnapshot: EMPTY_SNAPSHOT,
|
|
26
30
|
add(m) {
|
|
27
31
|
this.items.set(m.id, m);
|
|
32
|
+
this.cachedSnapshot = Array.from(this.items.values());
|
|
28
33
|
this.notify();
|
|
29
34
|
},
|
|
30
35
|
remove(id) {
|
|
31
|
-
if (this.items.delete(id))
|
|
36
|
+
if (this.items.delete(id)) {
|
|
37
|
+
this.cachedSnapshot = this.items.size === 0 ? EMPTY_SNAPSHOT : Array.from(this.items.values());
|
|
32
38
|
this.notify();
|
|
39
|
+
}
|
|
33
40
|
},
|
|
34
41
|
list() {
|
|
35
|
-
|
|
42
|
+
// 返回稳定引用(只在 add/remove 时改变)— 满足 useSyncExternalStore 契约
|
|
43
|
+
return this.cachedSnapshot;
|
|
36
44
|
},
|
|
37
45
|
subscribe(fn) {
|
|
38
46
|
this.listeners.add(fn);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOptimisticCart.js","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAYlD,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,IAAI,GAAG,EAA2B;IACzC,SAAS,EAAE,IAAI,GAAG,EAAc;
|
|
1
|
+
{"version":3,"file":"useOptimisticCart.js","sourceRoot":"","sources":["../../../src/components/hooks/useOptimisticCart.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -32,19 +32,29 @@ export interface PendingMutation {
|
|
|
32
32
|
inputs: any;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
// 关键:snapshot 必须是稳定引用,否则 useSyncExternalStore 每次比对都觉得变了 →
|
|
36
|
+
// 无限 re-render(React #185)+ hydration mismatch(#418/#423)
|
|
37
|
+
const EMPTY_SNAPSHOT: PendingMutation[] = [];
|
|
38
|
+
|
|
35
39
|
const pendingStore = {
|
|
36
40
|
items: new Map<string, PendingMutation>(),
|
|
37
41
|
listeners: new Set<() => void>(),
|
|
42
|
+
cachedSnapshot: EMPTY_SNAPSHOT as PendingMutation[],
|
|
38
43
|
|
|
39
44
|
add(m: PendingMutation) {
|
|
40
45
|
this.items.set(m.id, m);
|
|
46
|
+
this.cachedSnapshot = Array.from(this.items.values());
|
|
41
47
|
this.notify();
|
|
42
48
|
},
|
|
43
49
|
remove(id: string) {
|
|
44
|
-
if (this.items.delete(id))
|
|
50
|
+
if (this.items.delete(id)) {
|
|
51
|
+
this.cachedSnapshot = this.items.size === 0 ? EMPTY_SNAPSHOT : Array.from(this.items.values());
|
|
52
|
+
this.notify();
|
|
53
|
+
}
|
|
45
54
|
},
|
|
46
55
|
list(): PendingMutation[] {
|
|
47
|
-
|
|
56
|
+
// 返回稳定引用(只在 add/remove 时改变)— 满足 useSyncExternalStore 契约
|
|
57
|
+
return this.cachedSnapshot;
|
|
48
58
|
},
|
|
49
59
|
subscribe(fn: () => void): () => void {
|
|
50
60
|
this.listeners.add(fn);
|