我收到此错误=> TypeError:无法读取未定义的属性“ image”

时间:2020-06-02 10:13:43

标签: javascript node.js reactjs web

我在这个领域非常陌生,我在很多地方进行搜索,但找不到解决方案。我收到错误“ TypeError:无法读取未定义的属性'image'”。我不知道问题出在哪里。错误的图片在这里。

enter image description here

有错误的班级在这里。

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)在这里

enter image description here

2 个答案:

答案 0 :(得分:2)

您的变量product未初始化。看起来您正在后台加载它,它可能不会在第一次加载时初始化,但可以稍后进行初始化,因此在初始化之前,我将显示loading。在代码中使用product变量之前,请执行以下检查:

if (!product) {
 return <div>Loading...</div>;
}

答案 1 :(得分:0)

这是因为它不认为或不知道“图像”存在于“产品”上。您可以通过以下较小的更改来解决它:

{product.image && <img src={product.image} alt="product" />}

尽管如此,您可能仍然会对产品上的所有其他对象遇到相同的问题。更好的解决方案可能是对产品进行销毁以确保碎片存在:

const { image, name, rating, numReviews, price, description, status } = product;