开发者问题收集

如何在 React 中渲染对象数组

2020-10-13
359

我正在编写一个应用程序来响应。我创建了两个组件。一个组件正在从父组件接收一个对象,我想渲染它。这个对象有几个元素,其中一个是几个对象的数组。我在渲染这个数组的元素(对象)时遇到了一些问题。 这是主对象:

dishes = {
        id: 3,
        name:'ElaiCheese Cake',
        image: 'assets/images/elaicheesecake.png',
        category: 'dessert',
        label:'',
        price:'2.99',
        description:'A delectable',
        comments: [
            {
            id: 0,
            rating: 5,
            comment: "Imagine all the eatables, living in conFusion!",
            author: "John Lemon",
            date: "2012-10-16T17:57:28.556094Z"
            },
            {
            id: 1,
            rating: 4,
            comment: "Sends anyone to heaven, I wish I could get my mother-in-law to eat it!",
            author: "Paul McVites",
            date: "2014-09-05T17:57:28.556094Z"
            }
    ]}

除了数组元素之外,我可以毫无问题地读取对象的所有元素。我尝试了 map 方法:

const menu = this.props.dishes.comments.map((com) => <li key={com.id}>{com.author}</li>);

没有得到任何响应并遇到此错误: 未捕获的 TypeError:无法读取未定义的属性“map”

3个回答

在值存在之前不要渲染

每次您获得 map of undefined 时,您都知道在调用 map 之前的值是未定义的,在本例中, this.props.dishes.comments 的值是未定义的。不要尝试映射未定义的内容,因为 undefined 没有方法 map

const menu = (
  this.props.dishes 
  && this.props.dishes.comments 
  && this.props.dishes.comments.length > 0
) && this.props.dishes.comments.map((com) => <li key={com.id}>{com.author}</li>);
Joe Lloyd
2020-10-13

如果要使用地图呈现对象,请执行以下操作

const dishes= Object.keys(this.props.dishes).map((com) => <li key={com}>{com.author}</li>);

针对对象内的数组

const menu = this.props.dishes.comments.map((com) => <li key={com.id}>{com.author}</li>);
underscore
2020-10-13

您可以在主组件的返回语句中使用内联映射函数。您无需创建新变量,然后在 html 中引用它,只需内联即可。

https://carova.io/snippets/rendering-array-map-in-react

检查数组的“.length > 0”用于确保在尝试映射它们之前数组中有项目。

ilminternational
2022-08-11