Skip to content

Commit 906ef2a

Browse files
committed
Merge pull request #400 from jaalru/fix-395
🐛 fix(useLocalStorage): no longer returns a new setValue function every time setValue is called
2 parents e8b3433 + 2f38b14 commit 906ef2a

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -993,3 +993,9 @@ Errored release
993993
### Fixes
994994

995995
- Fixes `useInfiniteScroll` console.error message
996+
997+
## [3.12.3] - 2023-02-16
998+
999+
### Fixes
1000+
1001+
- `useLocalStorage` and `useSessionStorage` no longer return a new `setValue` function everytime `setValue` is called

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "beautiful-react-hooks",
3-
"version": "3.12.2",
3+
"version": "3.12.3",
44
"description": "A collection of beautiful (and hopefully useful) React hooks to speed-up your components and hooks development",
55
"main": "index.js",
66
"module": "esm/index.js",

src/factory/createStorageHook.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,16 @@ const createStorageHook = (type: 'session' | 'local') => {
5454
},
5555
)
5656

57-
const setValue: SetValue<TValue> = useCallback((value) => {
58-
const valueToStore = value instanceof Function ? value(storedValue) : value
59-
safelySetStorage(JSON.stringify(valueToStore))
60-
setStoredValue(valueToStore)
61-
}, [safelySetStorage, storedValue])
57+
const setValue: SetValue<TValue> = useCallback(
58+
(value: TValue) => {
59+
setStoredValue((current: TValue) => {
60+
const valueToStore = value instanceof Function ? value(current) : value
61+
safelySetStorage(JSON.stringify(valueToStore))
62+
return valueToStore
63+
})
64+
},
65+
[safelySetStorage]
66+
)
6267

6368
return [storedValue, setValue]
6469
}

test/useLocalStorage.spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,18 @@ describe('useLocalStorage', () => {
101101

102102
expect(result.current[0]).to.equal(200)
103103
})
104+
105+
it("should return the same setValue reference after setValue is called", () => {
106+
const { result } = renderHook(() =>
107+
useLocalStorage("storageKey_7", 100)
108+
)
109+
110+
const startingSetValue = result.current[1]
111+
112+
act(() => {
113+
result.current[1](prev => prev + 100)
114+
})
115+
116+
expect(result.current[1]).to.equal(startingSetValue)
117+
})
104118
})

test/useSessionStorage.spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,18 @@ describe('useSessionStorage', () => {
9999

100100
expect(result.current[0]).to.equal(200)
101101
})
102+
103+
it("should return the same setValue reference after setValue is called", () => {
104+
const { result } = renderHook(() =>
105+
useSessionStorage("storageKey_7", 100)
106+
)
107+
108+
const startingSetValue = result.current[1]
109+
110+
act(() => {
111+
result.current[1](prev => prev + 100)
112+
})
113+
114+
expect(result.current[1]).to.equal(startingSetValue)
115+
})
102116
})

0 commit comments

Comments
 (0)