我收到此错误 => TypeError: 无法读取未定义的属性“图像”
2020-06-02
3423
我在这个领域还很新,我搜索了很多地方,但找不到解决方案。我收到错误“ TypeError:无法读取未定义的属性‘image’ ”。我不知道问题出在哪里。错误的图片在这里。
出现错误的类在这里。
import React, {useEffect} from 'react';
import { Link } from 'react-router-dom';
import { useSelector, useDispatch } from 'react-redux';
import { detailsProduct } from '../actions/productActions';
function ProductScreen(props){
const productDetails = useSelector(state => state.productDetails);
const {product,loading,error} = productDetails;
const dispatch = useDispatch();
useEffect(() => {
dispatch(detailsProduct(props.match.params.id));
return () => {
//
}
}, [])
return <div>
<div className="back-to-result">
<Link to="/">Back to result</Link>
</div>
{loading?<div>Loading...</div>:
error? <div>{error}</div>:
(
<div className="details">
<div className="details-image">
<img src={product.image} alt="product"></img>
</div>
<div className="details-info">
<ul>
<li>
<h4>{product.name}</h4>
</li>
<li>
{product.rating} Stars ({product.numReviews} Reviews)
</li>
<li>
Price: <b>${product.price}</b>
</li>
<li>
Description:
<div>
{product.description}
</div>
</li>
</ul>
</div>
<div className="details-action">
<ul>
<li>
Price: {product.price}
</li>
<li>
Status: {product.status}
</li>
<li>
Qty: <select>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</li>
<li>
<button className="button">Add to Cart</button>
</li>
</ul>
</div>
</div>
)
}
</div>
}
export default ProductScreen;
console.log(productDetails) 在这里
2个回答
您的变量
product
未初始化。看起来您正在后台加载它,它可能在第一次加载时未初始化,但可以稍后初始化,因此我会显示
loading
直到它初始化。在您的代码中使用
product
变量之前,请进行如下检查:
if (!product) {
return <div>Loading...</div>;
}
MatejG
2020-06-02
这是因为它不认为或不知道“产品”上存在“图像”。您可以通过以下小改动来修复它:
{product.image && <img src={product.image} alt="product" />}
不过,您可能仍会遇到与产品上所有其他对象相同的问题。更好的解决方案可能是解构产品以确保各个部分存在:
const { image, name, rating, numReviews, price, description, status } = product;
rrd
2020-06-02