Skip to content

Commit

Permalink
Merge pull request #400 from jaalru/fix-395
Browse files Browse the repository at this point in the history
🐛  fix(useLocalStorage): no longer returns a new setValue function every time setValue is called
  • Loading branch information
antonioru committed Feb 25, 2023
2 parents e8b3433 + 2f38b14 commit 906ef2a
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 6 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -993,3 +993,9 @@ Errored release
### Fixes

- Fixes `useInfiniteScroll` console.error message

## [3.12.3] - 2023-02-16

### Fixes

- `useLocalStorage` and `useSessionStorage` no longer return a new `setValue` function everytime `setValue` is called
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "beautiful-react-hooks",
"version": "3.12.2",
"version": "3.12.3",
"description": "A collection of beautiful (and hopefully useful) React hooks to speed-up your components and hooks development",
"main": "index.js",
"module": "esm/index.js",
Expand Down
15 changes: 10 additions & 5 deletions src/factory/createStorageHook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,16 @@ const createStorageHook = (type: 'session' | 'local') => {
},
)

const setValue: SetValue<TValue> = useCallback((value) => {
const valueToStore = value instanceof Function ? value(storedValue) : value
safelySetStorage(JSON.stringify(valueToStore))
setStoredValue(valueToStore)
}, [safelySetStorage, storedValue])
const setValue: SetValue<TValue> = useCallback(
(value: TValue) => {
setStoredValue((current: TValue) => {
const valueToStore = value instanceof Function ? value(current) : value
safelySetStorage(JSON.stringify(valueToStore))
return valueToStore
})
},
[safelySetStorage]
)

return [storedValue, setValue]
}
Expand Down
14 changes: 14 additions & 0 deletions test/useLocalStorage.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,18 @@ describe('useLocalStorage', () => {

expect(result.current[0]).to.equal(200)
})

it("should return the same setValue reference after setValue is called", () => {
const { result } = renderHook(() =>
useLocalStorage("storageKey_7", 100)
)

const startingSetValue = result.current[1]

act(() => {
result.current[1](prev => prev + 100)
})

expect(result.current[1]).to.equal(startingSetValue)
})
})
14 changes: 14 additions & 0 deletions test/useSessionStorage.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,18 @@ describe('useSessionStorage', () => {

expect(result.current[0]).to.equal(200)
})

it("should return the same setValue reference after setValue is called", () => {
const { result } = renderHook(() =>
useSessionStorage("storageKey_7", 100)
)

const startingSetValue = result.current[1]

act(() => {
result.current[1](prev => prev + 100)
})

expect(result.current[1]).to.equal(startingSetValue)
})
})

0 comments on commit 906ef2a

Please sign in to comment.