Reactjs 更改异步存储项的数据
我正在Android应用程序中构建购物车。我一直在删除购物车上的物品。我的系统很简单。当有人在购物车上添加东西时:一个对象首先存储在异步存储上。然后,在我的购物车组件中,我也使用异步存储获取项目。这个项目被称为“购物车” 在我的购物车视图中,我有每个商品的图像、价格和数量。两个按钮允许用户修改每个项目的数量。但是我一直在删除这个项目。我使用slice使项目消失,但它只是从我的购物车组件中消失,并且项目仍在异步存储中,因此每次我刷新购物车组件时,使用slice删除的项目都会使用函数GetItem重新出现 因此,我试图从AsyncStorage和我的购物车组件中删除该对象。 这是我的AssyncStorage项目购物车:Reactjs 更改异步存储项的数据,reactjs,react-native,react-native-android,cart,asyncstorage,Reactjs,React Native,React Native Android,Cart,Asyncstorage,我正在Android应用程序中构建购物车。我一直在删除购物车上的物品。我的系统很简单。当有人在购物车上添加东西时:一个对象首先存储在异步存储上。然后,在我的购物车组件中,我也使用异步存储获取项目。这个项目被称为“购物车” 在我的购物车视图中,我有每个商品的图像、价格和数量。两个按钮允许用户修改每个项目的数量。但是我一直在删除这个项目。我使用slice使项目消失,但它只是从我的购物车组件中消失,并且项目仍在异步存储中,因此每次我刷新购物车组件时,使用slice删除的项目都会使用函数GetItem重
onClickAddCart(data){
const itemcart = {
food: data,
quantity: 1,
price: data.price
}
AsyncStorage.getItem('cart').then((datacart)=>{
if (datacart !== null) {
// We have data!!
const cart = JSON.parse(datacart)
cart.push(itemcart)
AsyncStorage.setItem('cart',JSON.stringify(cart));
}
else{
const cart = []
cart.push(itemcart)
AsyncStorage.setItem('cart',JSON.stringify(cart));
}
alert("Add Cart")
})
.catch((err)=>{
alert(err)
})
}
}
这是我要买的东西
componentDidMount(){
AsyncStorage.getItem('cart').then((cart)=>{
if (cart !== null) {
const cartfood = JSON.parse(cart)
this.setState({dataCart:cartfood})
}
})
.catch((err)=>{
alert(err)
})
}
这是我的购物车系统
onChangeQuat(i, type){
const cart = this.state.dataCart
let cant = cart[i].quantity;
if(type){
cant = cant + 1
cart[i].quantity = cant
this.setState({
dataCart:cart
})
}
else if (type == false&&cant>=2){
cant = cant -1
cart[i].quantity = cant
this.setState({
dataCart:cart
})
}
else if (type==false&&cant==1){
AsyncStorage.setItem(cart, JSON.stringify({quantity: null }));
cart.splice(i,1)
this.setState({
dataCart:cart
})
}
}
我得到的错误是:
您试图在一个不可变且已冻结的对象上,将键“0”的值设置为…“数量”:1…。您可以使用AsyncStorage.setItem()和AsyncStorage.mergeItem()的组合使用购物车项目更新购物车
removeCartItem = async (index) => {
try {
const cart = await AsyncStorage.getItem('cart');
let cartItems = JSON.parse(cart);
const updatedCartItems = cartItems.filter(function (e, itemIndex) { return itemIndex !== index });
await AsyncStorage.setItem('cart', JSON.stringify(updatedCartItems));
await AsyncStorage.mergeItem('cart', JSON.stringify(updatedCartItems));
} catch (error) {
console.log('error: ', error);
}
};
您可以结合使用AsyncStorage.setItem()和AsyncStorage.mergeItem()来使用购物车项目更新购物车
removeCartItem = async (index) => {
try {
const cart = await AsyncStorage.getItem('cart');
let cartItems = JSON.parse(cart);
const updatedCartItems = cartItems.filter(function (e, itemIndex) { return itemIndex !== index });
await AsyncStorage.setItem('cart', JSON.stringify(updatedCartItems));
await AsyncStorage.mergeItem('cart', JSON.stringify(updatedCartItems));
} catch (error) {
console.log('error: ', error);
}
};
我无法…我尝试了这些,但它只是在购物车中更新。AsyncStorage仍返回第一个。您是否正在设置数据后尝试获取数据?我正在尝试获取数据以将其删除…就像当您单击购物车中的“删除”按钮时,它将从购物车中删除。尝试在每次AsyncStorage操作之前添加Wait。我无法…我尝试了这些,但它只是在购物车中更新。AsyncStorage仍返回第一个。您是否正在设置数据后尝试获取数据?我正在尝试获取数据以将其删除…就像您单击购物车中的“删除”按钮时,它将从购物车中删除。尝试在每次AsyncStorage操作之前添加Wait。