Skip to content

Commit 22116b6

Browse files
authored
fix(useStorage): make sure to always read data if new value is undefined (#4957)
1 parent c0dca93 commit 22116b6

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

packages/core/useStorage/index.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,15 @@ describe('useStorage', () => {
122122
expect(storedValue).toBeFalsy()
123123
})
124124

125+
it('undefined value with existing store', () => {
126+
const initial = { foo: 'bar' }
127+
storage.setItem(KEY, JSON.stringify(initial))
128+
const store = useStorage(KEY, undefined, storage, { serializer: StorageSerializers.object })
129+
130+
expect.soft(store.value).toStrictEqual(initial)
131+
expect.soft(storage.getItem(KEY)).toBe(JSON.stringify(initial))
132+
})
133+
125134
it('remove value', async () => {
126135
storage.setItem(KEY, 'random')
127136

packages/core/useStorage/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ export function useStorage<T extends (string | number | boolean | object | null)
175175

176176
const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(
177177
data,
178-
() => write(data.value),
178+
newValue => write(newValue),
179179
{ flush, deep, eventFilter },
180180
)
181181

@@ -295,13 +295,17 @@ export function useStorage<T extends (string | number | boolean | object | null)
295295
return
296296
}
297297

298-
if (event && event.key !== keyComputed.value)
298+
if (event && event.key !== keyComputed.value) {
299299
return
300+
}
300301

301302
pauseWatch()
303+
302304
try {
303-
if (event?.newValue !== serializer.write(data.value))
305+
const serializedData = serializer.write(data.value)
306+
if (event === undefined || event?.newValue !== serializedData) {
304307
data.value = read(event)
308+
}
305309
}
306310
catch (e) {
307311
onError(e)

0 commit comments

Comments
 (0)