React - TypeError: Cannot read property 'image' of undefined

霸气de小男生 提交于 2021-01-29 08:08:39

问题


So I'm creating a e-commerce store for a sideproject, but I'm stuck on a problem. On the main page I have all the products, and I've created a route for the product details. When I click on one of them, it gets the id, and should output all the product details. I have the details about products in a JSON array "data.js".

When I click on a product in the main page, it displays the error: TypeError: Cannot read property 'image' of undefined - in the return part, where I put {product.image} in.

However, when I uncomment the part where it checks whether product exists or not (ProductPage.js), it still outputs "Item does not exist!", as if there weren't any data about the product in "data.js" file.

App.js

<Route path="/product/:id" component={ProductPage}></Route>

ProductPage.js

import React from 'react';
import data from '../data';

export default function ProductPage(props) {
const product = data.products.find((x) => x._id === props.match.params.id);
// if (!product) {
//     return <div>Item does not exist!</div>
// }
return (
    <div>
        <div className="row">
            <div className="col">
                <img src={product.image} alt={product.name}></img>
            </div>
        </div>
    </div>
);
}

Data.js

const data = {
products:[
{
    _id: 1,
    name: 'iPhone 11 Pro',
    category: 'Smartphones',
    image: '/images/2.jpg',
    price: 949,
    rating: 4.8,
    numReviews: 15,
    description: 'testtesttesttesttesttesttesttest',
},
],
};
export default data;

Thanks in advance.


回答1:


You need to wrap your ProductPage component with withRouter to access props.match.params.id.

Edit: if you are going to use props.match.params.id for comparison, keep in mind that it is a string

Change your ProductPage component to:

import React from 'react';
import data from '../data';
import {withRouter} from 'react-router';

function ProductPage(props) {
const product = data.products.find((x) => x._id === props.match.params.id);
return (
    <div>
        <div className="row">
            <div className="col">
                <img src={product.image} alt={product.name}></img>
            </div>
        </div>
    </div>
);
}

export default withRouter(ProductPage);


来源:https://stackoverflow.com/questions/64727803/react-typeerror-cannot-read-property-image-of-undefined

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!