TypeError:无法读取reactjs中未定义的属性“长度”
Posted
技术标签:
【中文标题】TypeError:无法读取reactjs中未定义的属性“长度”【英文标题】:TypeError: Cannot read property 'length' of undefined in reactjs 【发布时间】:2020-05-03 07:38:23 【问题描述】:当我尝试在反应中返回数组的长度时,我遇到了问题。错误是'TypeError:无法读取未定义的属性'长度'。我已将它放在另一个子组件中并且它可以工作,但是当我在 NavBar 中尝试时它只显示错误。
import React from 'react';
import './NavBar.css';
import FontAwesomeIcon from '@fortawesome/react-fontawesome';
import faCartPlus from '@fortawesome/free-solid-svg-icons';
const NavBar = (props) =>
const order = props.cart
return (
<div className='container-fluid'>
<nav className="navbar navbar-expand-lg navbar-light justify-content-md-between justify-content-center flex-wrap">
<a href="/"><img src="https://i.ibb.co/NZcQbJM/logo2.png" /></a>
<div>
<a href="/" className='nav-item' > <FontAwesomeIcon icon=faCartPlus /></a>
<a href="/" className='nav-item login'>Login</a>
<a href="/" className='nav-item'><button className="btn btn-danger btn-rounded">Sign Up</button></a>
</div>
</nav>
<div><h6>order.length</h6></div>
</div>
);
;
export default NavBar;
我不知道该怎么办!!!
【问题讨论】:
你如何渲染 NavBar,你应该将一个名为cart
的 prop 传递给 navbar,它是一个数组。
你应该提供NavBar的父元素的代码,人们可以知道cart
是怎样的,cart
怎样成为NarBar的props。
【参考方案1】:
您需要根据数组的存在来短路渲染。您正在尝试在道具可用之前渲染 order
的长度。
尝试以下方法:
<div><h6>order && order.length</h6></div>
【讨论】:
【参考方案2】:未定义的错误是因为order is not available that time
,所以需要检查order
是否存在,然后执行。
order ? order.length : 0
【讨论】:
【参考方案3】:其他答案几乎解决了问题,即您试图从字面上说undefined.length
,因为在创建/更新组件时的某个阶段没有定义道具order
。
但 IMO 仍然有一个更清洁的解决方案 - order?.length
。
what-if-not
的逻辑(来自@arun-kumar 的回答)——也可以写成——order?.length ?? 0
或order?.length || 0
。
更多关于它 -
https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Operators/Optional_chaining
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
https://github.com/facebook/create-react-app/releases/tag/v3.3.0 - CRA v3.3 已经支持这些。
更新 - 解构也是一种更简洁的方式。我经常使用它,因为它允许在未定义的情况下初始化 prop,但很容易被不同类型的值覆盖 - 因此我认为可选链比它更有优势。
【讨论】:
以上是关于TypeError:无法读取reactjs中未定义的属性“长度”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复'TypeError:无法读取 Javascript 中未定义的属性'标题'
TypeError:无法读取 Apollo 中未定义的属性“fetchMore”
TypeError:无法读取 Vue 中未定义的属性“id”
TypeError:无法读取 nativescript 中未定义的属性“cartesianChart”