【问题标题】:Accessing an array within an array using React, Gatsby and GraphQL使用 React、Gatsby 和 GraphQL 访问数组中的数组
【发布时间】:2022-01-20 22:34:58
【问题描述】:

使用 Contentful CMS,我创建了一个内容模型,该模型允许在一系列项目中包含多个项目。部分GraphQL查询如下:

   valueContainers {
    id
    title
    description
    singularValue {
      id
      subValueTitle
      subValueContent {
        subValueContent
      }
    }
  }

我能够显示顶级部分 (valueContainers) 的标题,但我试图在其中映射奇异值内部数组,但我很难通过数据。我映射下面数组的代码如下:

    return (
    <ValuesWrapper>
        {props.valueList.map((value) => (
            <ValueContainer>
                <ValueTitle key={value.id}>{value.title}</ValueTitle>
                <ValuesDescription>{value.description}</ValuesDescription>
                {value.singularValue.map((item) => (
                    <SingleItem key={item.id}>{item.subValueTitle}</SingleItem>
                ))}
            </ValueContainer>
        ))}
    </ValuesWrapper>
)

我在前端收到一条错误消息:

Error in function eval

Cannot read properties of null (reading 'map')

【问题讨论】:

    标签: reactjs graphql gatsby contentful


    【解决方案1】:

    您的方法看起来不错,但我的猜测是并非所有valueContainers 都具有或包含singularValue(或者换句话说,在某些元素中是null)。试试:

    return (
    <ValuesWrapper>
        {props.valueList.map((value) => (
            <ValueContainer>
                <ValueTitle key={value.id}>{value.title}</ValueTitle>
                <ValuesDescription>{value.description}</ValuesDescription>
                {value.singularValue && value.singularValue.map((item) => (
                    <SingleItem key={item.id}>{item.subValueTitle}</SingleItem>
                ))}
            </ValueContainer>
        ))}
        </ValuesWrapper>
    )
    

    或者使用可选的链式操作符:

    {value?.singularValue?.map((item) => (
        <SingleItem key={item.id}>{item.subValueTitle}</SingleItem>
    ))}
    

    如何将value.singularValue 作为道具传递给另一个组件 用同样的方法,我只是把组件包装在同一个 运营商?

    如果您将组件包装为children,但如果您想将值作为props 传递,只需使用:

    {value?.singularValue?.map((item) => <SingleItem key={item.id} singleItem={item} />)}
    

    并且该值将低于props.singleItem

    【讨论】:

    • 您发现其中一个容器的 null 值,谢谢!如果可能的话,我的下一个问题是如何使用相同的方法将 value.singularValue 作为道具传递给另一个组件,我是否只是将组件包装在相同的运算符中?
    • 如果你包装它,你使用的是children。您可以简单地执行以下操作:&lt;SingleItem key={item.id} singularValue={item}/&gt;
    猜你喜欢
    • 2019-06-22
    • 2020-03-24
    • 2021-03-18
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2020-01-27
    • 2018-04-14
    相关资源
    最近更新 更多