API 数据正在传递但未渲染

问题描述 投票:0回答:1

我正在使用 nextjs 和 woocommerce Rest api 构建一个电子商务网站。但我一直面临着将产品/数据从 woocommerce 渲染到 nextjs 前端的问题。我已经设置了用于获取产品的端点,并且在控制台中显示它们已通过,但是每当我尝试使用地图在主页上呈现它们时,它都会说没有产品。

控制台:https://prnt.sc/DqBK_QZv3Lfv

{
import axios from "axios";
import { Albert_Sans, Manrope } from "next/font/google";
import Navbar from "./Blocks/Navbar";
import Hero from "./Component/Hero";
import InfiniteCarousel from "./Component/InfiniteCarousel";
import Logos from "./Component/Logos";
import Category from "./Component/Category";
import("next").InferGetStaticPropsType;

const albert = Albert_Sans({ subsets: ["latin"], weight: ["400", "700"] });
const manrope = Manrope({ subsets: ["latin"] });

export async function getStaticProps() {
  try {
    const { data: products } = await axios.get(
      "http://localhost:3000/api/get-products"
    );

    const data = { products: products || [] };

    return {
      props: data,
    };
  } catch (error) {
    console.error("Error fetching products:", error);
    return {
      props: {
        products: [],
      },
    };
  }
}

export default function Home({ products }) {
  console.log("Products received in Home component:", products);

  return (
    <main
      className={`flex min-h-screen mx-auto bg-dark-shade-1 flex-col items-center ${manrope.className}`}
    >
      <Navbar />
      <Hero />
      <InfiniteCarousel className="w-full" />
      <Logos />
      <Category />
      {products.length > 0 ? (
        <div className="products-container">
          {products.map((product) => (
            <div key={product.id} className="product">
              <h3 className="text-white text-h2">{product.name}</h3>
              <p className="text-white text-l2">{product.price}</p>
            </div>
          ))}
        </div>
      ) : (
        <p className="text-white">No Products Found</p>
      )}
    </main>
  );
}

}
wordpress next.js woocommerce woocommerce-rest-api
1个回答
0
投票

我想应该是:

   products.product.map((productItem) => (
      <div key={product.id} className="product">
        <h3 className="text-h2 text-white">{productItem.name}</h3>
        <p className="text-l2 text-white">{productItem.price}</p>
      </div>
    ));

因为你的产品数据就在里面

products.product

© www.soinside.com 2019 - 2024. All rights reserved.