【问题标题】:How to remove an item from AsyncStorage in react-native如何在 react-native 中从 AsyncStorage 中删除项目
【发布时间】:2017-11-30 11:08:07
【问题描述】:

如何从 AsyncStorage 中删除项目?现在我正在尝试这段代码:

AsyncStorage.removeItem('userId');

但这对我不起作用。

【问题讨论】:

  • 尝试将回调添加到 removeItem 和控制台记录一些输出,以确保一切正常。 AsyncStorage.removeItem('token', (err) => console.log('userId', err));也提供更多你的代码

标签: react-native asyncstorage


【解决方案1】:

试试这个:

async removeItemValue(key) {
    try {
        await AsyncStorage.removeItem(key);
        return true;
    }
    catch(exception) {
        return false;
    }
}

【讨论】:

    【解决方案2】:

    这就是我所做的,有一个类似的问题。当你想根据它的 id 删除一个项目时,它工作得很好。确保每个项目都有一个唯一的 ID。

    remove_user = async(userid) => {
        try{
            let usersJSON= await AsyncStorage.getItem('users');
            let usersArray = JSON.parse(usersJSON);
            alteredUsers = usersArray.filter(function(e){
                return e.id !== userid.id
    
            })
            AsyncStorage.setItem('users', JSON.stringify(alteredUsers));
            this.setState({
               users:alteredUsers
            })
        }
        catch(error){
            console.log(error)
        }
    };
    

    【讨论】:

      【解决方案3】:

      这看起来是正确的,但也许您正试图过早地从AsyncStorage 回读?它是异步的,因此不会立即应用更改,如果您尝试在下一行获取它,您可能仍会看到密钥。尝试用await 调用AsyncStorage.removeItem 或在回调中做你想做的事情。

      【讨论】:

        【解决方案4】:

        这个删除方法通过传递索引从数组中删除对象(这里我称为id

        async deleteData(id)  {
              try {
                this.state.item.splice(id, 1);
                await AsyncStorage.setItem("mylist",JSON.stringify(this.state.item))
                this.setState({ item: JSON.parse(await AsyncStorage.getItem("mylist")) })
        
              } catch (error) {
                console.log(error);
              }
            };
        

        并通过使用 onPress 方法调用它,这里我使用 button 并传递 index

        <Button onPress={this.deleteData.bind(this,index)}>delete</Button>
        

        【讨论】:

        • 您刚刚拯救了我的一天,非常有用的答案,您可以在使用异步存储时使用它。
        【解决方案5】:

        这是 AsyncStorage.removeItem 的框架代码:

        removeItem: function(
         key: string,
         callback?: ?(error: ?Error) => void
        ): Promise {
         return new Promise((resolve, reject) => {
          RCTAsyncStorage.multiRemove([key], function(errors) {
            var errs = convertErrors(errors);
            callback && callback(errs && errs[0]);
            if (errs) {
              reject(errs[0]);
            } else {
              resolve(null);
            }
          });
         });
        }
        

        正如您在上面看到的,它需要密钥(这是您在 asyncstorage 中设置的要删除的项目的名称)和一个回调函数。确保您拥有正确的密钥和正确的参数,它应该可以正常工作。

        【讨论】:

        • 所以我在文档中看到了这一点,但我不明白如何实际使用它。语法对我来说是难以理解的。给定要删除的项目的键,您能否举例说明如何编写代码以从存储中删除项目?非常感谢。
        • 我也看到很多人都在使用 await.. 是否可以只使用 promises 和 .then 和 .catch ?
        【解决方案6】:

        在 react 中使用 removeItem() 方法从 AsyncStorage 中删除值。

        try {
            await AsyncStorage.removeItem(key);
            console.log('Data removed')
        }
        catch(exception) {
            console.log(exception)
        }
        

        【讨论】:

          【解决方案7】:

          为 react-native 试试这个

          const deletCar = async () => {
                  try {
                      await AsyncStorage.removeItem('@storage_Key').then(() => {
                         
                          // props.navigation.navigate('same page name refresh ');   
                         /* setprevCar({ carNumner: '', carModel: '' }) return  empty obj if deleted. */
                      })
          
          
                  }
                  catch (exception) {
                      return false;
                  }
          
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-02-01
            • 2017-02-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多