I am having problems in showing my images in my component. I managed to get all the data I need (price, description, title) but I cannot get the images. The process is that when a user clicks on a component, it opens the pdp of that particular product.
For sure the error is here: <img src={this.state.image} className="pdp-image"></img>
WHat should I put instead of this.state.image
?
Thanks in advance!
My code structure:
App.js
├── Header.js
├── Home.js
├── shop.js
├── PictureCard.js
├── Pdp.js
├── About.js
└── Footer.js
My code:
App.js
import React from "react"
import Header from "./components/Header"
import Main from "./components/Main"
import Footer from "./components/Footer"
import './App.css';
class App extends React.Component {
constructor() {
super()
this.state = {
productId: "",
productTitle: "",
productPrice: "",
productDescription: "",
productImage: ""
}
}
handleCallback = (id, name, price, description, image) => {
this.setState({
productId: id,
productTitle: name,
productPrice: price,
productDescription: description,
productImage: image
})
}
render() {
return (
<div className="App">
<Header />
<Main
parentCallback = {this.handleCallback}
productDescription = {this.state.productDescription}
productPrice = {this.state.productPrice}
productImage = {this.state.image}
/>
<Footer />
</div>
)
}
}
export default App
Main.js
import React from 'react'
import { Switch, Route } from 'react-router-dom'
import Home from './Home'
import Shop from './Shop'
import About from './About'
import Pdp from './Pdp'
function Main({parentCallback, productDescription, productPrice, productImage}) {
return (
<Switch> {/* The Switch decides which component to show based on the current URL.*/}
<Route exact path='/' render = {(props) => (<Home parentCallback={parentCallback} {...props}/>)}/>
<Route exact path='/shop' render = {(props) => (<Shop parentCallback={parentCallback} {...props}/>)}/>
<Route exact path='/pdp/:productTitle' render = {(props) => (<Pdp
parentCallback={parentCallback}
productDescription={productDescription}
productPrice={productPrice}
productImage={productImage}
{...props}/>)}/>
<Route exact path='/about' render = {(props) => (<About parentCallback={parentCallback} {...props}/>)}/>
</Switch>
)
}
export default Main
Pdp.js
import React from "react"
import { Link } from "react-router-dom"
import './Pdp.css'
class Pdp extends React.Component {
constructor(props) {
super(props)
this.state = {
description: this.props.productDescription,
price: this.props.productPrice,
image: this.props.productImage
}
}
render() {
return (
<div className="pdp-page">
<h3 className="filter-title">
<Link to="/shop" className="no-dec">All pictures</Link> <span>›</span> <a href="" className="no-dec">{this.props.match.params.productTitle}</a>
</h3>
<div className="pdp-container">
<div>
<img src={this.state.image} className="pdp-image"></img>
</div>
<div className="pdp-info-container">
<h3 className="pdp-title">{this.props.match.params.productTitle}</h3>
<p className="pdp-info-paragraph">€ {this.state.price}</p>
<p className="pdp-info-paragraph">{this.state.description}</p>
<button className="purchase-button">Purchase</button>
</div>
</div>
</div>
)
}
}
export default Pdp;
In App.js
, you are passing a prop to the main
component like this:
productImage = {this.state.image}
But in the App state and even in the setState, you are using productImage
...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.