Home > Software design >  Converting Localstorage to AsyncStorage in React Native
Converting Localstorage to AsyncStorage in React Native

Time:12-27

I have a json object that needs to be stored in local storage/async storage.

This is the local storage code and it compiles on the web correctly.

    useEffect(()=>{
      const value = localStorage.getItem(`myData${id}`);
      console.log(value);
      if(value){
          setData(JSON.parse(value));
      }
      },[])

  useEffect(() => {
      localStorage.setItem(`myData${id}`, JSON.stringify(data));
      })

And this is how I converted the same code to AsyncStorage for ios (after importing it)

     useEffect(()=>{
      const value = AsyncStorage.getItem(`myData${id}`);
      // console.log(value);
      if(value){
          setData(JSON.parse(value));    //ERROR HERE WITH JSON HIGHLIGHTED IN YELLOW 
      }
      },[])

  useEffect(() => {
      AsyncStorage.setItem(`myData${id}`, JSON.stringify(data));
     })

This shows a render error JSON Parse error: Unexpected identifier "object"

CodePudding user response:

You need to wait for AsyncStorage to get your item data:

     useEffect(()=>{
       const fn = async () => {
         const value = await AsyncStorage.getItem(`myData${id}`);
         if(value){
           setData(JSON.parse(value));    
         }
       }

       fn();
      },[]);

or

     useEffect(()=>{
       AsyncStorage
         .getItem(`myData${id}`)
         .then( value => { 
           if(value){
             setData(JSON.parse(value));    
           }
         });
     },[]);
  • Related