开发者问题收集

未捕获的 TypeError:无法读取未定义的属性:React Typescript

2022-08-30
648

我正在使用 React 和 graphql 获取数据,并使用 react/pdf-renderer 进行渲染。

我使用 renderContent,但它给了我这个错误。我做错了什么?

Uncaught TypeError: Cannot read properties of undefined (reading 'bookingConfirmationNumber')at renderContent

下面是我的代码

const renderContent = () => {
    const hotelDetails: HotelDetailsType = data.getHotelDetailsByIds.items[0]

    return (
      <PDFViewer>
        <Document>
          console.log(hotelDetails.bookingConfirmationNumber)
          <Page>

            <View>
                <Text>{hotelDetails.bookingConfirmationNumber}</Text>
                <Text>{hotelDetails.hotelName}</Text>
                <Text>{hotelDetails.address}</Text>
                <Text>{hotelDetails.hotelContactNumber}</Text>
                <Text>{hotelDetails.guestName}</Text>
                <Text>{hotelDetails.guests.adults}</Text>
                <Text>{hotelDetails.guests.children}</Text>
            </View>
          </Page>
        </Document>
      </PDFViewer>      
  )}

这是我的架构

export type HotelDetailsType = {
  bookingConfirmationNumber: string
  hotelName: string
  address: string
  hotelContactNumber: string
  guestName: string
  guests: HotelGuestsType
}

我尝试了可选链接,它呈现了 PDF 组件,但未获取数据,查询在 Graphql 中运行良好。非常感谢任何输入和资源。

谢谢。

更新:

hotelDetails 确实发送了未定义。但我仍然不知道为什么。如果我直接在 graphql 中查询,它可以正常工作。请参阅以下附加信息。

const InvoicePDFModal: React.FC<InvoicePDFModalProps> = ({ hideModal, hotelBookingId }) => {
  const profile = useSelector(selectedCustomerProfileSelector)
  const { data, loading, error } = useQuery(GET_HOTEL_DETAILS_BY_IDS, {
    variables: {
      hotelDetailIds: [hotelBookingId],
      customerId: profile.userId
    }
  })

Graphql snip https://i.sstatic.net/Im9z0.jpg

非常感谢大家的帮助。非常感谢。

2个回答

看起来 data.getHotelDetailsByIds 返回的是空数组。因此, data.getHotelDetailsByIds.item[0]undefined

ChanHyeok-Im
2022-08-30

hotelDetails 导致未定义,仅仅是因为 data.getHotelDetailsByIds.items[0] (以及您问题的上一个版本中的 data.getHotelDetailsByIds )未定义。当您检查 data 时,您应该会看到这个问题。

abgregs
2022-08-30