AsyncStorage не сохраняет данные после закрытия приложения

Я делаю доказательство концепции в React Native. Моя идея состоит в том, чтобы хранить небольшой объем данных с помощью AsyncStorage, но они не сохраняются после закрытия и открытия приложения. Данные сохранятся, если я не закрою приложение.

Я сохраняю значения в редукторе, это мой код:

    const initialState = {
    data: [],
    fetching: false
};

const todoReducer = (state = initialState, action) => {
    console.log('action', action);
    console.log('state', state);
    let copied = Object.assign({}, state);
    switch (action.type){
        case ADD_TODO:
            copied.data.push({ready: false, text: action.payload});
            break;
        case CHECK_TODO:
            copied.data[action.payload].ready = true;
            break;
        case REMOVE_TODO:
            copied.data.splice(action.payload, 1);
            break;
        case GETTING_DATA:
            copied.fetching = true;
            break;
        case SET_STORE:
            console.log('action.payload', action.payload);
            copied.data = action.payload;
            copied.fetching = false;
            break;
        default:
            break;
    }
    AsyncStorage.setItem(STORAGE_TODO_KEY, JSON.stringify(copied.data));
    return copied;
};

У меня также есть кнопка, которая ищет информацию (не сразу после сохранения) и находится в образце в текстовом формате, это код

               <Content>
                <Text>{this.state.value}</Text>
                <Button rounded style={{width: '100%', marginTop: 10}}
                        onPress={async ()=> {
                            try {
                                const value = await AsyncStorage.getItem(STORAGE_TODO_KEY);
                                if (value !== null) {
                                    // We have data!!
                                    console.log(value);
                                    this.setState({value})
                                }else{
                                    console.log('No hay data :c');
                                    this.setState({value: 'No hay data :c'})
                                }
                            } catch (error) {
                                // Error retrieving data
                                console.log('Error', error);
                                this.setState({value: error})
                            }
                        }}>
                    <Text style={{textAlign: 'center', width: '100%'}}>Mostar lo guardado</Text>
                </Button>
                {this.props.todos.fetching && <Text>Cargando Lista de quehaceres...</Text>}
                {
                    this.props.todos.data.length > 0 ?
                        this.renderTodoList()
                        : null
                }
            </Content>

В момент выполнения приложения, сохранения данных и нажатия кнопки информация отображается, то есть восстанавливается из AsyncStorage, но после закрытия приложения данные не возвращаются.


person Matias Aguirre Luco    schedule 20.12.2018    source источник
comment
Вам нужно будет предоставить код для записи и чтения из Asyncstorage, который вы используете, чтобы получить некоторую помощь.   -  person Falloutcoder    schedule 20.12.2018
comment
код добавлен. Спасибо за ответ   -  person Matias Aguirre Luco    schedule 20.12.2018
comment
Эй, ты когда-нибудь узнал, как это сделать?   -  person slopeofhope    schedule 24.11.2019


Ответы (2)


Если вы работаете на Android в режиме разработки, то, вероятно, истекло время ожидания AsyncStorage: https://github.com/rt2zz/redux-persist/issues/864

person Jarvis Luong    schedule 20.12.2018
comment
Не в режиме разработки - person Matias Aguirre Luco; 20.12.2018

AsyncStorage - это асинхронная постоянная система хранения ключей и значений, ее можно использовать на любом устройстве в приложении.

использовать AsyncStorage сначала импорт:

import {AsyncStorage} from 'react-native';

Чтобы установить значение в AsyncStorage, можно использовать, как показано ниже:

export function setAsyncStorage(key, item) {
    try {
        AsyncStorage.setItem(key, item);
    } catch (error) {
        console.log(error);
    }
}

для получения значения из хранилища используйте функцию ниже:

export async function getAsyncStorage(key) {
    try {
        const data = await AsyncStorage.getItem(key);
        return data;
    } catch (error) {
        console.log(error);
    }
}
person Rocky    schedule 20.12.2018
comment
Я делаю что-то очень похожее на это, я обновил публикацию своим кодом. Спасибо за ответ - person Matias Aguirre Luco; 20.12.2018