feat(persisted-state): Add eraseWhenDefault option. And fix incorrect value when storage key is wiped.#424
Open
jkoppel wants to merge 1 commit into
Conversation
… value when storage key is wiped. PersistedState.current treats storage as the source of truth and falls back to an in-memory value when the key is absent, but that fallback was never updated on write (only in the constructor and on cross-tab events), so current could return a stale value whenever the key was wiped. Keep the in-memory value in sync on every write, and add an eraseWhenDefault option that removes the key when the value deep-equals initialValue (an absent key reads back as the default), keeping storage clean and letting a later change to the hard-coded default take effect.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
If you use PersistedState for settings on dynamically-generated content, you can wind up with a lot of keys. If most of these values are just the default initial value, this is a lot of wasted space, especially if the thing being stored is a rich object. Since localStorage is very limited in space, this can be a problem.
The
eraseWhenDefaultoption greatly mitigates this problem, deleting redundant information, at the cost of a small computation overhead on every write.The code and docs were drafted with AI, but heavily reviewed and edited by human. The test is AI-written and unreviewed. This PR comment is entirely human written.