1

我正在 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 中恢复,但是一旦应用程序关闭它就不会返回数据

4

2 回答 2

0

如果您在 Android 上以 Dev 模式运行,则可能是 AsyncStorage 超时:https ://github.com/rt2zz/redux-persist/issues/864

于 2018-12-20T05:25:52.387 回答
-4

AsyncStorage是异步持久化的key-value存储系统,可以在app中的任何一个ware上使用。

首先使用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);
    }
}
于 2018-12-20T04:40:37.013 回答