Реагируйте Native AsyncStorage не перезаписывая данные - PullRequest
1 голос
/ 22 марта 2019

Я пытаюсь создать приложение, и у меня есть несколько объектов в массиве, для которых я использую AsyncStorage. Мне нужно изменить один элемент объекта, но если я попытаюсь изменить его, он не сохранит эти изменения.

Мой код:

save = async () => {
this.state.dataSource.notes = this.state.text;
try {
  AsyncStorage.clear();
  await AsyncStorage.setItem('medicines', JSON.stringify(this.state.dataSource));
} catch (error) {
  console.log('error');
}
this.setModalVisible(!this.state.modalVisible);

this.state.text сохраняет значение ввода текста.

this.state.dataSource хранит массив объектов.

Обе они работают так, как должны.

Массив выглядит так:

Array = [
item = {
    id: 'id',
    name: 'name',
    brand: 'brand',
    inname: 'inname',
    chosenWeekDay: 'week day',
    androidDate: 'date for android',
    chosenAndroidTime: 'time for android',
    notes: 'notes in a string',
  }]

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Я нашел решение:

save = async () => {
  this.changeNotes(this.state.id, this.state.text);
  try {
    AsyncStorage.clear();
    await AsyncStorage.setItem('medicines', JSON.stringify(this.state.dataSource));
  } catch (error) {
    console.log('error');
  }
  this.setModalVisible(!this.state.modalVisible);
}


 changeNotes( value, note ) {
  for (var i in this.state.dataSource) {
    if (this.state.dataSource[i].id == value) {
      this.state.dataSource[i].notes = note;
      break;
     }
   }
 }
0 голосов
/ 22 марта 2019

Вам необходимо указать целевой объект в вашем массиве dataSource

let { dataSource, text } = this.state;
const yourSpecfiicIndex = 12; // whatever
dataSource[yourSpecfiicIndex].notes = text;

//...

await AsyncStorage.setItem('medicines', JSON.stringify(dataSource));
...