从 getStaticProps 迭代对象并在组件模板中显示

Posted

技术标签:

【中文标题】从 getStaticProps 迭代对象并在组件模板中显示【英文标题】:Iterating object from getStaticProps and displaying in component template 【发布时间】:2021-10-02 12:00:22 【问题描述】:

我正在尝试显示发生在getStaticProps 中的数据库提取的结果,但是当我在组件模板中映射对象时出现以下错误。我想显示返回数据中的所有数据。

我的代码:

import React from "react"
import  GetStaticProps  from "next"

// pages/index.tsx
import prisma from '../lib/prisma'

export const getStaticProps: GetStaticProps = async () => 
  const tracks = await prisma.tracks.findMany();
  return  props:  tracks  ;
;

const Tracks = ( tracks ) => 
  console.log(tracks)

  return (
    <div>
      <h1>All Tracks</h1>
      tracks.map((track ) => (
        <div>track.ts</div>
        ))
   </div>
  );


export default Tracks;

错误:

Unhandled Runtime Error

Error: Objects are not valid as a React child (found: Sat Jun 27 2020 17:43:15 GMT-0500 (Central Daylight Time)). If you meant to render a collection of children, use an array instead.

下面是响应的样子:

【问题讨论】:

【参考方案1】:

track.tsDate 类型,基本上是 object。你不能只在 JSX 中渲染 Date 对象。您需要将其转换为字符串或数字,例如:

const Tracks = ( tracks ) => 
  console.log(tracks)

  return (
    <div>
      <h1>All Tracks</h1>
      tracks.map((track ) => (
        <div>String(track.ts)</div>
        ))
   </div>
  );

【讨论】:

【参考方案2】:

试试这个

<div>JSON.stringify(track)</div>

【讨论】:

以上是关于从 getStaticProps 迭代对象并在组件模板中显示的主要内容,如果未能解决你的问题,请参考以下文章

从 getStaticProps 获取的数据不显示在页面组件中

使用 HOC 包装时,组件不会从 getStaticProps 接收道具

在 Next/React 组件中导入 global vs getStaticProps

如果直接从 index.js 调用,Nexjs getStaticProps / getInitialProps 通过工作返回未定义的组件

getStaticProps 返回一个空对象

如何迭代嵌套对象并在 jsx 中渲染?