Skip to content

Commit 457dbe4

Browse files
committed
fix(hooks): add golbal update to effect hook
1 parent 4d0422b commit 457dbe4

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

packages/hooks/src/createGlobalState.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { ImmerHook, Updater } from './useImmer';
33
import { freeze, produce } from 'immer';
44
import { useState } from 'react';
55

6+
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
67
import { useUnmount } from './useUnmount';
78

89
interface GlobalStateHook<S> {
@@ -34,9 +35,12 @@ export function createGlobalState<S>(initialValue?: S): GlobalStateHook<S | unde
3435
() => {
3536
const [state, setState] = useState(store.state);
3637

37-
if (!store.updates.has(setState)) {
38-
store.updates.add(setState);
39-
}
38+
// eslint-disable-next-line react-hooks/exhaustive-deps
39+
useIsomorphicLayoutEffect(() => {
40+
if (!store.updates.has(setState)) {
41+
store.updates.add(setState);
42+
}
43+
});
4044

4145
useUnmount(() => {
4246
store.updates.delete(setState);

packages/hooks/src/storage/useStorage.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { AbstractStorage } from './storage';
44
import { isNull, isUndefined } from 'lodash';
55
import { useEffect, useMemo, useState } from 'react';
66

7+
import { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';
78
import { LocalStorageService } from './localStorage';
89
import { STRING_PARSER } from './parser';
910

@@ -64,12 +65,15 @@ export function useStorage<V, K = string>(
6465
}, [SERVICE, defaultValue, deserializer, key, serializer]);
6566
const [, setOriginValue] = useState(SERVICE.getItem(key));
6667

67-
const updatesOfKey = updates.get(key);
68-
if (isUndefined(updatesOfKey)) {
69-
updates.set(key, new Set([setOriginValue]));
70-
} else if (!updatesOfKey.has(setOriginValue)) {
71-
updatesOfKey.add(setOriginValue);
72-
}
68+
// eslint-disable-next-line react-hooks/exhaustive-deps
69+
useIsomorphicLayoutEffect(() => {
70+
const updatesOfKey = updates.get(key);
71+
if (isUndefined(updatesOfKey)) {
72+
updates.set(key, new Set([setOriginValue]));
73+
} else if (!updatesOfKey.has(setOriginValue)) {
74+
updatesOfKey.add(setOriginValue);
75+
}
76+
});
7377

7478
useEffect(() => {
7579
updates.get(key)?.delete(setOriginValue);

0 commit comments

Comments
 (0)