javascript - 道具未捕获类型错误:无法读取未定义的属性“名称”
问题描述
伙计们需要帮助,我正在将我的 products.jsx 文件中的道具传递给我的 product.jsx 文件,并收到错误消息
Product.jsx:12 Uncaught TypeError: Cannot read property 'name' of undefined
这是我的 Products.jsx 文件
import React from 'react';
import { Grid } from '@material-ui/core';
import Product from './Product/Product';
const products =[
{id: 1 , name: 'Shoes', description: 'walking shoes', price: '#5'},
{id: 2 , name: 'apple', description: 'macbook', price: '#10'},
];
const Products = () => {
return (
<Main>
<Grid container justify="center" spacing={4}>
{products.map((product) => (
<Grid item key={product.id} xs={12} sm={6} md={4} lg={3}>
<Product product={product}/>
</Grid>
))}
</Grid>
</Main>
)
}
export default Products
这是我的 product.jsx 文件
import React from 'react'
import { Card, CardMedia, CardContent, CardActions, Typography, IconButton } from '@material-ui/core';
import { AddShoppingCart } from '@material-ui/icons';
import useStyles from './styles'
const Product = ({ product }) => {
const classes = useStyles();
return (
<Card className={classes.root}>
<CardMedia className={classes.media} image='' title={product.name} />
<CardContent>
<div className={classes.cardContent}>
<Typography gutterBottom variant="h5" component="h2">
{product.name}
</Typography>
<Typography gutterBottom variant="h5" component="h2">
{product.price}
</Typography>
</div>
<Typography variant="h2" color="textSecondary" component="p">{product.description}</Typography>
</CardContent>
<CardActions disableSpacing className={classes.cardActions}>
<IconButton aria-label="Add to Cart">
<AddShoppingCart />
</IconButton>
</CardActions>
</Card>
)
}
export default Product
我似乎没有看到错误,它不应该给我无法读取属性名称错误请帮助
解决方案
使用空检查来避免此类问题。
产品.jsx
const Products = () => {
return (
<Main>
<Grid container justify="center" spacing={4}>
{products && products.map((product) => (
<Grid item key={product.id} xs={12} sm={6} md={4} lg={3}>
<Product product={product}/>
</Grid>
))}
</Grid>
</Main>
)}
产品.jsx
const Product = ({ product }) => {
const classes = useStyles();
return (
<Card className={classes.root}>
<CardMedia className={classes.media} image='' title={product?.name} />
<CardContent>
<div className={classes.cardContent}>
<Typography gutterBottom variant="h5" component="h2">
{product?.name}
</Typography>
<Typography gutterBottom variant="h5" component="h2">
{product?.price}
</Typography>
</div>
<Typography variant="h2" color="textSecondary" component="p">{product.description}</Typography>
</CardContent>
<CardActions disableSpacing className={classes.cardActions}>
<IconButton aria-label="Add to Cart">
<AddShoppingCart />
</IconButton>
</CardActions>
</Card>
)
}
推荐阅读
- javascript - 正则表达式在多行文本中查找多个字符串模式
- python - pandas 系列:用插值数据点删除和替换 NaN
- java - 有什么想法可以防止特定属性出现在日志中吗?
- r - Talend 中的 R 脚本
- python - 计算 pandas DataFrame 中整行的出现次数
- r - 根据R中DF中匹配的行值获取列名
- python - 如何在python中将具有一个元素的列表转换为具有多个元素的列表
- tensorflow - 模型动物园中的 Tensorflow 2.0 模型都没有处理文档
- python - 如何在具有重叠日期的数据框中按年分隔总停留时间?
- python - 从计数器列表python访问元素