Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 更改异步存储项的数据_Reactjs_React Native_React Native Android_Cart_Asyncstorage - Fatal编程技术网

Reactjs 更改异步存储项的数据

Reactjs 更改异步存储项的数据,reactjs,react-native,react-native-android,cart,asyncstorage,Reactjs,React Native,React Native Android,Cart,Asyncstorage,我正在Android应用程序中构建购物车。我一直在删除购物车上的物品。我的系统很简单。当有人在购物车上添加东西时:一个对象首先存储在异步存储上。然后,在我的购物车组件中,我也使用异步存储获取项目。这个项目被称为“购物车” 在我的购物车视图中,我有每个商品的图像、价格和数量。两个按钮允许用户修改每个项目的数量。但是我一直在删除这个项目。我使用slice使项目消失,但它只是从我的购物车组件中消失,并且项目仍在异步存储中,因此每次我刷新购物车组件时,使用slice删除的项目都会使用函数GetItem重

我正在Android应用程序中构建购物车。我一直在删除购物车上的物品。我的系统很简单。当有人在购物车上添加东西时:一个对象首先存储在异步存储上。然后,在我的购物车组件中,我也使用异步存储获取项目。这个项目被称为“购物车”

在我的购物车视图中,我有每个商品的图像、价格和数量。两个按钮允许用户修改每个项目的数量。但是我一直在删除这个项目。我使用slice使项目消失,但它只是从我的购物车组件中消失,并且项目仍在异步存储中,因此每次我刷新购物车组件时,使用slice删除的项目都会使用函数GetItem重新出现

因此,我试图从AsyncStorage和我的购物车组件中删除该对象。 这是我的AssyncStorage项目购物车:

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。