如何在 react-native 中从 AsyncStorage 中删除一个项目

How to remove an item from AsyncStorage in react-native

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

AsyncStorage.removeItem('userId');

但这对我不起作用。

这是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 调用 AsyncStorage.removeItem 或在回调中执行您想执行的操作。

试试这个:

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

这就是我所做的,有一个类似的 issue.It 当你想根据它的 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)
    }
};

这个删除方法通过传递索引从数组中删除对象(这里我调用了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>

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

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

为 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;
        }

    }