I'm trying to fetch data from my server, I've tested the data fetching using Postman, everything is fine. I also double checked whether my API path was wrong, also not the issue.
I changed useEffect to useLayoutEffect, also no luck. I created a separate function outside the useEffect hook, also not working. I created console.log("I was here") on every single line, where each log was successfully printed inside the fetchProduct function.
Now I'm so stuck. I suspect the effects finish before the promise returns. Thank you in advance.
ProductDetail component
import React, { useEffect, useState } from "react"
import EcommerceLayoutsTypeFourteenth from "../layouts/Ecommerce/EcommerceLayoutsTypeFourteenth/EcommerceLayoutsTypeFourteenth"
import EcommerceLayoutsTypeSecond from "../layouts/Ecommerce/EcommerceLayoutsTypeSecond/EcommerceLayoutsTypeSecond"
import axios from "axios"
const ProductDetail = ({ match, products }) => {
const [product, setProduct] = useState({})
useEffect(() => {
const fetchProduct = async () => {
const response = await axios.get(`/api/products/${match.params.id}`)
setProduct(response.data)
}
fetchProduct()
}, [match])
return (
<>
<EcommerceLayoutsTypeSecond product={product} />
<EcommerceLayoutsTypeFourteenth products={products} />
</>
)
}
export default ProductDetail
This is my App.js
import React, { useState, useEffect } from "react"
import { BrowserRouter as Router, Route, Switch } from "react-router-dom"
import Container from "reactstrap/lib/Container"
import FootersLayoutsTypeEighth from "./layouts/FootersLayouts/FootersLayoutsTypeEighth/FootersLayoutsTypeEighth"
import Header from "./layouts/HeaderLayouts/Header.js"
import HomeScreen from "./screens/HomeScreen"
import ProductDetail from "./screens/ProductDetail"
import axios from "axios"
const App = () => {
const [products, setProducts] = useState([])
useEffect(() => {
const fetchProducts = async () => {
const response = await axios.get("/api/products/")
setProducts(response.data)
}
fetchProducts()
}, [])
return (
<Router>
<Container>
<Header dark={false} />
</Container>
<Switch>
<Route
exact
path="/"
render={(props) => <HomeScreen {...props} products={products} />}
/>
<Route
path="/products/:id"
render={(props) => <ProductDetail {...props} products={products} />}
/>
</Switch>
<FootersLayoutsTypeEighth />
</Router>
)
}
export default App