开发者问题收集

在 React 中从 api 获取数据时出现“.map 不是函数”错误

2022-08-05
311

我是 React 新手,我想渲染从 API 获取的产品数据。我正在使用 map 函数在屏幕上显示从 API 获取的数据。但控制台中出现以下错误。数据没有问题,我可以看到它是从 API 中提取的控制台结果,但它没有以表格的形式打印在屏幕上,我认为如果我解决了 .map 函数问题,它可能会起作用。可能是什么问题。你遇到过这个问题吗?

错误

ProductList.js:27 Uncaught TypeError: products.map is not a function
The above error occurred in the <ProductList> component:

我的产品列表

import { ProductContext } from '../Contexts/ProductContext';
import React, { useContext } from 'react';
import Product from './Product'

export default function ProductList() {

    const { products } = useContext(ProductContext);

    return (
        <>
            <div>


                <table className='table table-striped table-hover'>
                    <thead>
                        <tr>
                            <th>Product ID</th>
                            <th>product is offerable</th>
                            <th>Product Name</th>
                            <th>Product Description</th>
                            <th>Product is sold</th>
                            <th>Category ID</th>

                        </tr>
                    </thead>
                    <tbody>
                        <div>
                        {products.map((product) => (

                            <tr>
                                <td>{product.productId}</td>
                                <td>{String(product.isOfferable)}</td>
                                <td>{product.productName}</td>
                                <td>{product.productDescription}</td>
                                <td>{String(product.isSold)}</td>
                                <td>{product.categoryName}</td>
                            </tr>

                        ))}
                    </div>


                    </tbody>
                </table>
            </div>
        </>
    )


}

我的 API 数据来自 POSTMAN

{
    "data": [
        {
            "categoryId": 1,
            "productId": 1,
            "productName": "Bilgisayar",
            "categoryName": "Yazılım",
            "colorName": "gri",
            "price": 15000,
            "brandName": "ASUS",
            "isOfferable": false,
            "isSold": false
        },                         // example data. it continues like this
2个回答

您尝试迭代对象而不是对象内的数组。您必须使用 products.data.map(...) 。此外,我建议在您的产品对象上使用可选链接,因为您将在 products 从服务器完全获取之前尝试访问 .data 。因此,您的 products 对象最初将未定义,并且您无法在其上访问 .data

{products?.data.map((data) => ...}
PRSHL
2022-08-05

改为执行 products.data.map() 你跳过了包含数组的数据

Alaa Eddine Cherif
2022-08-05