Функция элемента набора React Native Async Storage

Nov 03 2020

Я использую асинхронное хранилище в моем приложении со списком товаров. Проблема, с которой я столкнулся, заключается в том, что мой первый элемент не сохраняется в асинхронном режиме, пока я не введу второй элемент. Я сохраняю массив объектов с помощью реагирующих крючков. Например, если я введу элементы как 1) Яблоки 2) Бананы, тогда только яблоки будут сохранены в асинхронном режиме, а бананы не будут сохранены, пока я не введу третий элемент.

const [getWant, setwant] = useState([]);

const saveData = async () => {
      AsyncStorage.clear()
       try {
        await AsyncStorage.setItem("@pantry102", JSON.stringify(getWant))
         console.log(getWant)
         alert('Data successfully saved')
       } catch (e) {
         alert('Failed to save the data to the storage')
       }
     }
const readData = async () => {
        try {
          const userData= await AsyncStorage.getItem("@pantry102")
          const userData2 = JSON.parse(userData)
          if (userData2 !== null) {
            console.log(userData2)
            setwant(userData2)
            
          }
        } catch (e) {
        alert('Failed to fetch the data from storage')
        }
      }
useEffect(() => {
      readData()
      }, [])

функция saveData вызывается внутри функции additems, которая вызывается при отправке текстового поля

Ответы

1 xdeepakv Nov 10 2020 at 19:51

Вы забыли дождаться очистки данных. Это тоже асинхронный характер.

await AsyncStorage.clear()

const saveData = async () => {
  try {
    await AsyncStorage.clear();
    await AsyncStorage.setItem("@pantry102", JSON.stringify(getWant));
    console.log(getWant);
    alert("Data successfully saved");
  } catch (e) {
    alert("Failed to save the data to the storage");
  }
};

Я предложу, просто отмените это. Нет необходимости очищать.

Читать больше: https://react-native-async-storage.github.io/async-storage/docs/api#clear

:-D

rufeng Nov 04 2020 at 10:03

Существует библиотека с открытым исходным кодом response-native-easy-app , которая обертывает использование AsyncStorage, с помощью которого вы можете синхронно получать доступ к любым данным в AsncStorage, возможно, это может решить вашу проблему, ниже приведен пример программы, возможно, вы можете обратиться к Это. код .