-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Description
Hi, the following code always returns a string instead of an object after a page reload:
const [ myObj , setMyObj ] = useStorageItem<object>('myobj');
const set = () => {
setMyObj({
'key1': 'value1',
'key2': 'value2',
});
};
// After the set function is calledmyObj is of type object, but after a page reload myObj is of type string
console.log(myObj);I think it's caused by the following line https://github.com/ionic-team/ionic-react-hooks/blob/76745d1b3a0b4c62949dd6095ede3cbb4843c9ab/src/storage/useStorage.ts#L87 because on the web the type of result.value is always string. Which is because of the implementation of the storage API for the web, where localStorage.getItem() always returns a string or null for the value key: https://github.com/ionic-team/capacitor/blob/f08e4a4f3cff1eedca3ca7292da7892ab2de5806/core/src/web/storage.ts#L21
I fixed it for me the following way:
- setStoredValue(typeof result.value === 'string' ? result.value : JSON.parse(result.value!));
+ try {
+ const parsedValue = JSON.parse(result.value!);
+ setStoredValue(parsedValue);
+ } catch (err) {
+ setStoredValue(result.value);
+ }If you want I can submit a PR with the change, but I think there should be a better solution than using try and catch.
willviles, hellokingdom, leandrogehlen, gugahoi and Chadh13
Metadata
Metadata
Assignees
Labels
No labels