访问cart.order_items.length会导致TypeError:无法读取未定义的属性“ length”

时间:2019-10-19 20:41:45

标签: javascript json reactjs

TypeError: Cannot read property 'length' of undefined

这就是我运行Django和ReactJs电子商务应用程序时所说的编译器。我该怎么办?

错误位置显示为cart.js

>    53 |   text={`${cart !== null ? cart.order_items.length : 0}`} 
> ^  54 |   pointing

错误位置显示为Layout.js

>    33 |     dispatch(cartSuccess(res.data));
> ^  34 |   })

action/cart.js

export const fetchCart = () => {
  return dispatch => {
    dispatch(cartStart());
    authAxios
      .get(orderSummaryURL)
      .then(res => {
        dispatch(cartSuccess(res.data));
      })
      .catch(err => {
        dispatch(cartFail(err));
      });
  };
};

Layout.js

<Menu.Menu inverted position="right">
  <Dropdown
    icon="filter"
    loading={loading}
    text={`${cart !== null ? cart.order_items.length : 0}`}
    pointing
    className="link item"
  >
    <Dropdown.Menu>
      <Dropdown.Item>List Item</Dropdown.Item>
      <Dropdown.Item>List Item</Dropdown.Item>
      <Dropdown.Divider />
      <Dropdown.Header>Header Item</Dropdown.Header>
      <Dropdown.Item>
        <i className="dropdown icon" />
        <span className="text">Submenu</span>
        <Dropdown.Menu>
          <Dropdown.Item>List Item</Dropdown.Item>
          <Dropdown.Item>List Item</Dropdown.Item>
        </Dropdown.Menu>
      </Dropdown.Item>
      <Dropdown.Item>List Item</Dropdown.Item>
    </Dropdown.Menu>
  </Dropdown>
</Menu.Menu>

1 个答案:

答案 0 :(得分:2)

您要应用的空值检查位于cart对象上,而不是属性order_items上。因此,如果cart.order_items的值为undefinednull,则会发生此错误。为了确保您不会读取未定义或空值的长度,您还需要在order_items属性上应用检查。

用第53行替换这将解决您的问题:

text={`${cart ? (cart.order_items ? cart.order_items.length : 0) : 0}`}

要更深入地了解这种情况的工作原理,请参见以下代码段:

const cart0 = null
const cart1 = undefined
const cart2 = {}
const cart3 = { order_items: null }
const cart4 = { order_items: [] }
const cart5 = { order_items: ["Apple", "Banana", "Pineapple"] }

function cartLength(detail, cart) {
	console.log(
		detail,
		cart
			? cart.order_items
				? cart.order_items.length
				: "cart.order_items is undefined or null"
			: "Cart undefined or null"
	)
}

cartLength("Cart 0: ", cart0)
cartLength("Cart 1: ", cart1)
cartLength("Cart 2: ", cart2)
cartLength("Cart 3: ", cart3)
cartLength("Cart 4: ", cart4)
cartLength("Cart 5: ", cart5)