如何在 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;
}
}
如何从 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;
}
}