AsyncStorage — ошибка (React Native)

У меня проблема с сохранением пользовательских данных в приложении, нативном для реагирования, над которым я сейчас работаю со своей командой. У нас есть приложение со списком событий, и когда вы нажимаете на событие, оно открывает страницу сведений о событии и показывает меню для выбора да/нет/возможно (меню посещаемости), которое пользователь может переключать, чтобы выбрать, будут ли они посещают мероприятие. Наш код выглядит так:

import React from 'react';
import { AsyncStorage, Text, View, StyleSheet, Picker } from 'react-native';

export class PickerMenu extends React.Component {
    state = { choice: '' }

   componentDidMount = () => AsyncStorage.getItem('choice').then((value) => this.setState({ 'choice': value }))

   setName = (value) => {
     AsyncStorage.setItem('choice', value);
     this.setState({ 'choice': value });
   }
   render() {
     return (
       <View>
         <Picker selectedValue = {this.state.choice} onValueChange = {this.setName} itemStyle = {styles.item}>
           <Picker.Item label = "Yes" value = "yes" />
           <Picker.Item label = "Maybe" value = "maybe" />
           <Picker.Item label = "No" value = "no" />
         </Picker>
       </View>
     );
   }
}

Мы запускаем сборку на Xcode. Мы хотим, чтобы выбор пользователя по-прежнему присутствовал после обновления страницы или закрытия приложения — это работает, ОДНАКО, выбор, который выбрал пользователь, остается неизменным для каждого события. Например. если они выбирают «Может быть» для события 1, выбор «может быть» выделяется для каждого другого события в нашем приложении.

У нас была идея получить уникальные идентификаторы событий и внедрить их в функцию AsyncStorage, но мы не знаем, как это сделать.

Любая помощь будет большой и высоко ценится - спасибо!


person Saf    schedule 17.12.2017    source источник
comment
Поскольку AsyncStorage является ключевым значением, вы можете использовать хак типа AsyncStorage.setItem('event_id‹evnt_id›’,‹choice›);   -  person Gurmeet Singh    schedule 17.12.2017
comment
Похоже, вы уже поняли это! Просто установитеItem с определенным ключом, onDidMount назначьте только конкретный выбор для состояния и оставьте все остальные варианты пустыми.   -  person Gavin Thomas    schedule 17.12.2017
comment
спасибо за наводку, ребята - посмотрю на них   -  person Saf    schedule 18.12.2017


Ответы (1)


В этом случае вам нужно использовать async/await для хранения в асинхронном хранилище следующим образом:

setName = async (value) => {
   await AsyncStorage.setItem('choice', value);
   this.setState({ 'choice': value });
}

Надеюсь, я помог!

Несколько полезных ссылок для вас:

https://facebook.github.io/react-native/docs/asyncstorage.html

person Luiz Fernando Sousa Camargo    schedule 17.12.2017