Сохранить и обновить сохраненный объект - PullRequest
0 голосов
/ 24 января 2019

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

метод извлечения

_retrieveObj = async () => {
try {
  const value = await AsyncStorage.getItem('OBJECT');
  if (value !== null) {
    return JSON.parse(value);
  }
  return [];
} catch (error) {
  // Error retrieving data
}
};

метод хранения

_storeObj = async (obj) => {

let numberArray = [];
try {
  let storedNumbers = await AsyncStorage.getItem('OBJECT');
  if (storedNumbers !== null) {
    numberArray = JSON.parse(storedNumbers);
  }
  numberArray.push(obj)
  await AsyncStorage.setItem('OBJECT', JSON.stringify(numberArray));
} catch (error) {
  console.log(error)
}
};

вызов внутри компонента

 _UpdateAndSave = async (objToDisplay) => {

const storedObj = await this._retrieveObj();
if (storedObj !== objToDisplay) {
  const obj  = this._merge(storedObj ,objToDisplay);

  const objToSave = JSON.stringify(obj);
  this._storeObj(objToSave);
}

метод объединения объектов (найден онлайн)

_merge = (a, b) => {
let c = {};
for(let idx in a) {
  c[idx] = a[idx];
}
for(let idx in b) {
  c[idx] = b[idx];
}
return c;
};

Спасибо

1 Ответ

0 голосов
/ 24 января 2019

Причина, по которой вы получаете массив, заключается в том, что вы сохраняете массив объектов в вашей функции _storeObj .Похоже, вы уже объединяете существующие и новые объекты в один, поэтому вам просто нужно сохранить результат объединения.Вам не нужна ваша функция _storeObj .

_UpdateAndSave = async (objToDisplay) => {

const storedObj = await this._retrieveObj();
if (storedObj !== objToDisplay) {
  const obj  = this._merge(storedObj ,objToDisplay);

  const objToSave = JSON.stringify(obj);
  await AsyncStorage.setItem('OBJECT', objToSave);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...