【问题标题】:Save an array of Items in AsyncStorage在 AsyncStorage 中保存一组项目
【发布时间】:2018-06-02 12:09:58
【问题描述】:

如何在 react-native 中使用 AsyncStorage 保存一组项目?这样每次您将另一个联系人添加到您的列表时,它都会不断添加而不是重写

代码:

saveContacts = ()=> {
    try {
        let con = {
            roomId: this.state.roomId,
            nickname: this.state.nickname,
        }
        AsyncStorage.setItem('contacts', JSON.stringify(con));
    }catch(error) {
        alert(error)
    }
}

【问题讨论】:

    标签: javascript arrays react-native items asyncstorage


    【解决方案1】:

    您可以检索联系人并将新联系人连接到列表中,然后将其重新设置为存储。只需确保最初将其设置为空数组:

    AsyncStorage.getItem('contacts')
      .then((contacts) => {
        const c = contacts ? JSON.parse(contacts) : [];
        c.push(con);
        AsyncStorage.setItem('contacts', JSON.stringify(c));
      });
    

    【讨论】:

    • 我得到“可能未处理的 Promise Rejection (id: 0): TypeError: JSON.parse(contacts).concat is not a function。(在 'JSON.parse(contacts).concat(con) ', 'JSON.parse(contacts).concat' 未定义)"
    • 更新了我的答案。
    • 等待 AsyncStorage.getItem('contacts') ?
    【解决方案2】:

    获取记录并将其设置到数组中,然后保存到 AsyncStorage:

    saveContacts = async () => {
        try {
            let con = {
                roomId: this.state.roomId,
                nickname: this.state.nickname,
            }
            const contacts = await AsyncStorage.getItem('contacts') || '[]';
            contacts = JSON.parse(contacts);
            contacts.push(con);
            AsyncStorage.setItem('contacts', JSON.stringify(contacts)).then(() => {
                console.log('Contacts updated.')
            });
        } catch(error) {
            alert(error)
        }
    };
    

    【讨论】:

    • 我得到 " [TypeError: contacts.push 不是函数。(在 'contacts.push(con)' 中,'contacts.push' 未定义)] "
    • 这可能意味着您将数组以外的东西分配给联系人。确保 AsynStorage 项目 'contacts' 确实是一个数组,这将起作用。
    • 联系人不应该是那个常量变量吗?顺便说一句,我不得不将其更改为 let 变量,因为如果它是常量,则无法执行下面的 2 行。
    • Contacts 是变量,在向其推送任何内容之前应该是一个数组。否则,你最终会得到你得到的错误。这与以下答案失败的原因相同。我会记录 const contacts = await AsynStorage.getItem('contacts') 并查看它返回的内容。
    • @jkhedani 嘿,如果我只想在从存储中获取项目时记录 RoomID,如何处理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多