Xử lý AddToCart trong ReactNative

  • Xin các bạn chỉ giáo. Mình có đoạn code xử lý “AddToCart” trong ReactNative lưu tr6en AsyncStorage. Bây giờ mình muốn xử lý như sau:
  • Khi người dùng click vào mua hàng sản phẩm 1 lần 1 thì -> OK
  • Người dùng tiếp tục click vào mua hàng sản phẩm 1 lần 2 -> mình muốn là chỉ cộng số lượng của sản phẩm là 2, Mình muốn các bạn chỉ mình cách kiểm tra ProductId đã tồn tại trong AsyncStorage.Code của Mình
    constructor(props) {
        super(props);
        this.state = {
          product: {},
          quantity: 1,
          selectedColor: '',
          selectedSize: ''
        };
      }

    addToCart() {
        var product = this.state.item; // item mình lấy từ file JSON
        product['color'] = this.state.selectedColor;
        product['size'] = this.state.selectedSize;
        product['quantity'] = this.state.quantity;
        AsyncStorage.getItem("CART", (err, res) => {
          console.log(res)
          if (!res) AsyncStorage.setItem("CART", JSON.stringify([product]));
          else {
            var items = JSON.parse(res);
            items.push(product);
            AsyncStorage.setItem("CART", JSON.stringify(items));
          }
          Toast.show({
            text: 'Product added to your cart !',
            position: 'bottom',
            type: 'success',
            buttonText: 'Dismiss',
            duration: 3000
          });
        });
      }

THay vì bạn lưu 1 mảng product. Thì bạn lưu 1 object. Việc lưu object sẽ lấy ra nhanh hơn là mảng. Với key của object là productId.

{
 "1": {
    // fields
  },
  "2": {
    // fields
  },
  ...
}

Khi muốn kt 1 product có chưa thì bạn chỉ cần

if (productList[productId]) { productList[productId].quantity += 1 }
else { productList[productId] = product }

Nhưng lưu vậy tui không loop qua nó được. Đơn giản, dùng Object.values(productList) sẽ moi ra hết values của object này

productArr = Object.values(productList)

Ngoài ra việc bạn đang làm là thay đổi giá trị của state thông qua reference

        var product = this.state.item; // item mình lấy từ file JSON
        product['color'] = this.state.selectedColor;
        product['size'] = this.state.selectedSize;
        product['quantity'] = this.state.quantity;

Điều này sẽ gây khó khăn cho bạn sau này khi debug nếu gặp lỗi nhé. Và nó cũng là một con bug đang chờ bạn xử lý đó.

5 Likes

Ok, Cám ơn Bạn đã support

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?