javascript - TypeError:无法读取未定义的属性“名称”,无法遍历对象数组
问题描述
我是反应的初学者,当我使用 map 函数遍历从 category.json 导入的对象数组时,请帮我解决这个问题,我将对象的道具传递给我的 Category 组件,所以当我的类别页面正在渲染它给类型错误:无法读取未定义的属性“名称”。
应用程序.js
import React, { useState } from 'react';
import category from './data/categories.json';
import Categ from './Components/Categ';
function App() {
const [data, setData] = useState(category);
return (
<div className="App">
{data.map(item => (
<Categ key={item.id} name={item.name} desc={item.description} />
))}
</div>
);
}
export default App;
`
分类.js
import React from 'react';
function Categ({ props }) {
console.log(props);
return (
<div>
<h1>{props.name}</h1>
<p>{props.desc}</p>
</div>
);
}
export default Categ;
类别.json
[
{
"id": "fgsa2142fa",
"name": "Keyboards",
"description": "Buy different keyboard from any brand available"
},
{
"id": "xasgy42fa",
"name": "Headphones",
"description": "Find best-fit for your ears"
}
]
解决方案
当你的组件第一次渲染时,你的data
对象是未定义的。您可以通过多种方式轻松解决此问题:
- 可选链接:?.
map
仅当数据不虚假时,表示法才会调用函数
function App() {
const [data, setData] = useState(category);
return (
<div className="App">
{data?.map(item => (
<Categ key={item.id} name={item.name} desc={item.description} />
))}
</div>
);
}
- 条件渲染:
function App() {
const [data, setData] = useState(category);
return (
<div className="App">
{data && data.map(item => (
<Categ key={item.id} name={item.name} desc={item.description} />
))}
</div>
);
}
或者:
function App() {
const [data, setData] = useState(category);
return (
<div className="App">
{data ? data.map(item => (
<Categ key={item.id} name={item.name} desc={item.description} />
)) : <p> No data </p>}
</div>
);
}
本质上,data && data.map
在data?.map
这里做同样的事情。
- @Patryk 的建议:
(data || []).map
推荐阅读
- c++ - 在 QT [C++] 中实现线程的几个错误
- python - 我将如何解决它 - /account/signup/ name 'SignUpForm' 处的 NameError 未定义
- python - 如何加入最后一个字符为“\”的文件的多行
- android - 博览会弹出后构建 android 应用程序时出错 > 没有方法签名:build_*.android() 适用于参数类型
- discord.js - 音乐测验 Discord 机器人
- python - 将谷歌表格 API 调用更改为批处理
- javascript - Socket.io 客户端初始化似乎没有像记录的那样工作 (4.x)
- javascript - 具有自定义浏览器历史记录的路由器仅在刷新后才有效
- amazon-web-services - AWS CDK:字符串到 EC2 InstanceSize 的映射
- javascript - javascript的基本条件