use-persisted-state icon indicating copy to clipboard operation
use-persisted-state copied to clipboard

Unexpected token c in JSON at position 0

Open burtonator opened this issue 4 years ago • 7 comments

I'll try to post more but I'm getting this when values are loaded between windows

Uncaught SyntaxError: Unexpected token c in JSON at position 0
    at JSON.parse (<anonymous>)
    at Object.current (:8500/Users/burton/projects/polar-app/packages/polar-bookshelf/node_modules/use-persisted-state/dist/use-persisted-state.js:1)
    at e (:8500/Users/burton/projects/polar-app/packages/polar-bookshelf/node_modules/@use-it/event-listener/dist/event-listener.js:1)

burtonator avatar May 10 '20 20:05 burtonator

ran into the same issue as the old localstorage state was not json.parsable https://github.com/donavon/use-persisted-state/blob/develop/src/createStorage.js#L9

i am using https://github.com/astoilkov/use-local-storage-state for now as in cases where the parsing fails the default value is returned. https://github.com/astoilkov/use-local-storage-state/blob/master/index.ts#L15

joernroeder avatar May 18 '20 22:05 joernroeder

code in use-local-storage-state is prone to same issue. Although it checks for null a newValue that fails to JSON.parse will still explode

rebeccakeller avatar Jun 18 '20 17:06 rebeccakeller

@rebeccakeller it solved my issue as it catches the json.parse explosion and returns the defaultValue

joernroeder avatar Jun 19 '20 09:06 joernroeder

I also stumbled upon this, and I believe this is a really severe issue, as any app in the production can completely break down, making the user unable to access it at all if they had previously accidentally stored a variable in the browser using the native JS localStorage, and there's no way for developers to even notice this hazard during the development, for example if they switch the libraries and aren't lucky enough to keep the old state. Could you please mention this severe limitation in the Readme, so that people don't mistakenly use this library as long as this issue is known? I've been directed to this project from somewhere, but it seems the library https://github.com/astoilkov/use-local-storage-state is generally a better choice for any similar purpose. Maybe the projects could be even merged to serve as a universal solution if there's no plan to provide anything custom.

scscgit avatar Jun 23 '20 09:06 scscgit

@donavon is there a PR raised for this issue, so that someone could contribute?

This is a production level bug

abidRahim avatar Oct 29 '20 08:10 abidRahim

I just opened a PR to https://github.com/astoilkov/use-local-storage-state/pull/14 to allow using sessionStorage too. Once that's merged, I believe it's a much better alternative, as it also handles other cases nicely, like events - unrelated keys or non-matching Storage events.

Rendez avatar Nov 11 '20 17:11 Rendez

use-local-storage-state author here. I can confirm that this issue doesn't exist in my implementation. I also have been actively maintaining it for the past 7 months and will be happy to see new people using it.

astoilkov avatar Nov 15 '20 17:11 astoilkov