反应:TypeError:无法读取未定义的属性“ productID”

时间:2019-02-13 07:36:47

标签: javascript reactjs error-handling local-storage undefined

我遇到了一个异常错误,该函数解析本地存储中的对象数组。

尝试:从本地存储中获取对象并将其productIDselectedQty属性值解析为int。

当我记录其typeof值即

   console.log("parse value", typeof item.selectedQty);

我得到*"parse value number" ...好极了!

但是我仍然遇到REACT错误:

  

TypeError:无法读取未定义的属性“ productID”

 46 | if (allItems && Array.isArray(allItems)) {
  47 |   for (let i = 0; i <= allItems.length; i++) {
  48 |     var item = allItems[i];
> 49 |     item.productID = parseInt(item.productID);
  50 | ^   item.selectedQty = parseInt(item.selectedQty);
  51 | 
  52 |     console.log("parse value", typeof item.productID);
  

堆栈跟踪至

Cart.componentDidMount
src/components/cart.jsx:14
  11 | };
  12 | componentDidMount() {
  13 |   // 1. Add Items In Cart
> 14 |   var updateCartItems = this.addItemToCart();
     | ^  15 | 
  16 |   // 2. Caclulate total cart value
  17 |   var newCartValue = this.getCartValue(updateCartItems);
  

代码

  addItemToCart() {
    var allItems = JSON.parse(localStorage.getItem("itemsArray"));
    // console.log("--->", Array.isArray(allItems), allItems);
    // allItems.map(item => JSON.parse(item));

    var updateCartItems = this.state.cartItems;

    if (allItems && Array.isArray(allItems)) {
      for (let i = 0; i <= allItems.length; i++) {
        var item = allItems[i];
        item.productID = parseInt(item.productID);
        item.selectedQty = parseInt(item.selectedQty);

        console.log("parse value", typeof item.productID);
        console.log("parse value", typeof item.selectedQty);
        updateCartItems.push(item);
      }
    }
    return updateCartItems;
  }

  componentDidMount() {
    // 1. Add Items In Cart
    var updateCartItems = this.addItemToCart();

    // 2. Caclulate total cart value
    var newCartValue = this.getCartValue(updateCartItems);

    this.setState({ cartValue: newCartValue, cartItems: updateCartItems });
  }

1 个答案:

答案 0 :(得分:1)

我认为,如果循环从 0 开始,则您的 for 循环代码有问题,那么需要处理到 length-1

更改

for (let i = 0; i <= allItems.length; i++)

for (let i = 0; i < allItems.length; i++)