Skip to content

Commit fbc1a58

Browse files
committed
fix: storage, store 개선
1 parent ab18b2c commit fbc1a58

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

packages/lib/src/createStorage.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
import { createObserver } from "./createObserver.ts";
22

3-
export const createStorage = <T>(key: string, storage = window.localStorage) => {
4-
let data: T | null = JSON.parse(storage.getItem(key) ?? "null");
3+
export const createStorage = <T>(key: string, storage = typeof window !== "undefined" ? window.localStorage : null) => {
4+
let data: T | null = storage ? JSON.parse(storage.getItem(key) ?? "null") : null;
55
const { subscribe, notify } = createObserver();
66

77
const get = () => data;
88

99
const set = (value: T) => {
1010
try {
1111
data = value;
12-
storage.setItem(key, JSON.stringify(data));
12+
if (storage) {
13+
storage.setItem(key, JSON.stringify(data));
14+
}
1315
notify();
1416
} catch (error) {
1517
console.error(`Error setting storage item for key "${key}":`, error);
@@ -19,7 +21,9 @@ export const createStorage = <T>(key: string, storage = window.localStorage) =>
1921
const reset = () => {
2022
try {
2123
data = null;
22-
storage.removeItem(key);
24+
if (storage) {
25+
storage.removeItem(key);
26+
}
2327
notify();
2428
} catch (error) {
2529
console.error(`Error removing storage item for key "${key}":`, error);

packages/lib/src/hooks/useStore.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ const defaultSelector = <T, S = T>(state: T) => state as unknown as S;
88

99
export const useStore = <T, S = T>(store: Store<T>, selector: (state: T) => S = defaultSelector<T, S>) => {
1010
const shallowSelector = useShallowSelector(selector);
11-
return useSyncExternalStore(store.subscribe, () => shallowSelector(store.getState()));
11+
const getSnapshot = () => shallowSelector(store.getState());
12+
const getServerSnapshot = () => shallowSelector(store.getState());
13+
14+
return useSyncExternalStore(store.subscribe, getSnapshot, getServerSnapshot);
1215
};

0 commit comments

Comments
 (0)