Как я могу удалить выбранный элемент из asyncstorage?

#javascript #react-native #asyncstorage

#javascript #react-native #asyncstorage

Вопрос:

Я создаю простое приложение для просмотра фильмов. Я использую asyncstorage для сохранения выбранных фильмов. Я хочу удалить фильм, выбранный пользователем в разделе списка наблюдения. Прямо сейчас я пытаюсь использовать этот код:

     removeItemValue= async (item, index) => {
    let value1 = await AsyncStorage.getItem('movies');
    value1 =JSON.parse(value1);
    console.log("value1" value)
    //value = item.splice(index,1)
    if (value1 !== null){
        //var index = value.indexOf(x => x.Title === item.Title);
        if (index > -1){
        value1.splice(index, 1);
        await AsyncStorage.removeItem('movies');
        
        AsyncStorage.setItem('movies',JSON.stringify(value)); 
        
    }
    }       
    
}
 

Но это не работает.
Можете ли вы сказать мне, где что-то не так?

Также моя часть клика: введите описание изображения здесь

Комментарии:

1. Ваше хранилище может содержать только строковые значения. AsyncStorage.getItem в случае успеха он преобразуется в строку. Вам нужно десериализовать строку с помощью JSON.parse() . Вы можете сделать это, только если вы сохранили данные правильно (т. Е. В виде строки в формате JSON), это можно сделать с помощью JSON.stringify() .

2. Я добавил указанную вами функцию и обновил ее

Ответ №1:

 removeItemValue = async(index) => { // don't need item here
  // avoid mutations, create new variables
  const rawValue = await AsyncStorage.getItem('movies');
  try {
    const jsonValue = JSON.parse(rawValue) || []; // avoid undefined or null
    const finalValue = [...jsonValue.slice(0, index), ...jsonValue.slice(index   1)];
    await AsyncStorage.setItem('movies', JSON.stringify(finalValue)); // add await here
  } catch (e) {
    console.log('Parsing failed', e)
  }
}
 

И удалить с помощью () => this.removeItemValue(index)

Ответ №2:

Мольбы попробуйте это

 var moviesArray = [{title:'A1'},{title:'A2'},{title:'A3'},{title:'A4'},{title:'A5'},{title:'A6'},{title:'A7'},]

removeSelectedMovie=(name)=>{
return moviesArray.filter(item=>item.title.toLowerCase() !== name.toLowerCase())
}

//removeSelectedMovie(MovieName here and its will return a //new array excluded selected movie name)
console.log(removeSelectedMovie('a1'))
console.log(removeSelectedMovie('a3'))
console.log(removeSelectedMovie('a4'))
console.log(removeSelectedMovie('a7'))