diff --git a/src/useStorageValue/index.dom.test.ts b/src/useStorageValue/index.dom.test.ts index 03546f02..bd4710ee 100644 --- a/src/useStorageValue/index.dom.test.ts +++ b/src/useStorageValue/index.dom.test.ts @@ -298,6 +298,25 @@ describe('useStorageValue', () => { globalThis.localStorage.removeItem('foo'); }); + it('should reset state if tracked key is removed', async () => { + globalThis.localStorage.setItem('foo', '"bar"'); + const {result} = await renderHook(() => + useStorageValue(globalThis.localStorage, 'foo', {defaultValue: 'default value'}), + ); + let value = expectResultValue(result); + expect(value.value).toBe('bar'); + + await act(async () => { + globalThis.dispatchEvent( + new StorageEvent('storage', {key: 'foo', storageArea: globalThis.localStorage, newValue: null}), + ); + }); + + value = expectResultValue(result); + globalThis.localStorage.removeItem('foo'); + expect(value.value).toBe('default value'); + }); + it('should not update data on event storage or key mismatch', async () => { const {result} = await renderHook(() => useStorageValue(globalThis.localStorage, 'foo')); let value = expectResultValue(result); diff --git a/src/useStorageValue/index.ts b/src/useStorageValue/index.ts index 65d7fad6..8d04a889 100644 --- a/src/useStorageValue/index.ts +++ b/src/useStorageValue/index.ts @@ -25,7 +25,7 @@ const invokeStorageKeyListeners = (s: Storage, key: string, value: string | null }; const storageEventHandler = (evt: StorageEvent) => { - if (evt.storageArea && evt.key !== null && evt.key !== '' && evt.newValue !== null && evt.newValue !== '') { + if (evt.storageArea && evt.key !== null && evt.key !== '') { invokeStorageKeyListeners(evt.storageArea, evt.key, evt.newValue); } };