如何在最新的Next.js中获取服务器端数据?尝试了 getStaticProps 但它没有运行并且未定义

2024-03-24

我正在使用 Next.js 开发 Django Rest 框架,但我陷入了从 API 获取数据的困境。我在这个网址中有数据http://127.0.0.1:8000/api/campaigns当我访问该网址时,我会看到数据。

问题是当我使用 Next.js 获取并控制台数据时,我得到undefined。另外,当我尝试映射数据时,我收到错误:

未处理的运行时错误

错误:无法读取未定义的属性(读取“地图”)

这是我的Index.js完成数据获取的文件:

import React from 'react'

export default function Index ({data}) {
  console.log(data)
  return (
    <div>
      <main>
        <h1>Available Campaigns</h1>
        {data.map((element) => <div key={element.slug}>
          <div>
            <div>
              <img src={element.logo} height={120} width={100} alt="image" />
            </div>
            <div></div>
          </div>

        </div>)}
      </main>
    </div>
  );
}

export async function getStaticProps() {
  const response = await fetch("http://127.0.0.1:8000/api/campaigns");
  const data = await response.json();
  return {
    props: {
      data: data
    },
  }
}

这是我访问该 URL 时获取的数据的屏幕截图:

以下是前端内 Next.js 应用程序的文件结构:

另请注意,我使用的是最新版本的 Next.js。任何帮助将不胜感激。谢谢。


方法如getServerSideProps https://nextjs.org/docs/pages/building-your-application/data-fetching/get-server-side-props and getStaticProps https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props用于在服务器上获取数据,但它们仅适用于内部的页面组件pages https://nextjs.org/docs/getting-started/project-structure文件夹(在 Next.js 中设置路由的初始方法)。

从 Next.js 13 开始,在app https://nextjs.org/docs/getting-started/project-structure目录(当您对下图中显示的最后一个问题回答“是”时使用)我们有服务器组件 https://nextjs.org/docs/getting-started/react-essentials#server-components,您可以直接在组件主体中获取数据,如下面的代码片段所示(请阅读注释):

/*
  If you want to access headers or cookies while fetching data,
  you can use these functions:
*/
import { cookies, headers } from "next/headers";

/*
 If the below component is the default export of a `page.js` and you are using 
 dynamic routes, slugs will be passed as part of `params`, and 
 query strings are passed as part of `searchParams`.
*/
export default async function Component({ params, searchParams }) {
  /* 
    This request should be cached until manually invalidated.
    Similar to `getStaticProps`.
    `force-cache` is the default and can be omitted.
  */
  const staticData = await fetch(`https://...`, { cache: "force-cache" });

  /*
    This request should be refetched on every request.
    Similar to `getServerSideProps`.
  */
  const dynamicData = await fetch(`https://...`, { cache: "no-store" });

  /* 
    This request should be cached with a lifetime of 10 seconds.
    Similar to `getStaticProps` with the `revalidate` option.
  */
  const revalidatedData = await fetch(`https://...`, {
    next: { revalidate: 10 },
  });

  return "...";
}

也就是说,您无需fetch(),使用任何库,甚至直接使用 ORM 与数据库对话,在这种情况下您可以使用路由段配置 https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config:

// layout.js OR page.js OR route.js ????????

import prisma from "./lib/prisma";

/*
  Keep one of the possibilities shown below (there are more on the doc), 
  depending on your needs. 
*/

export const revalidate = 10; // If you want to revalidate every 10s
// OR
export const dynamic = "force-dynamic"; // If you want no caching at all
// ...

async function getPosts() {
  const posts = await prisma.post.findMany();
  return posts;
}

export default async function Page() {
  const posts = await getPosts();
  // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在最新的Next.js中获取服务器端数据?尝试了 getStaticProps 但它没有运行并且未定义 的相关文章

随机推荐

  • 在 Grails 中,命令“tomcat:deploy”不会像命令“dev war”那样生成完整的战争

    命令 grails dev war 完美部署在我的本地 Tomcat6 服务器中 生成了一个包含以下文件夹的战争 css images js META INF plugins WEB INF 不幸的是 我需要该命令tomcat 部署也有效
  • 如何仅迭代元组的第一个变量

    在Python中 当你有一个元组列表时 你可以迭代它们 例如 当你有 3d 点时 for x y z in points pass do something with x y or z 如果您只想使用第一个变量 或者第一个和第三个变量 该怎
  • case 表达式中是否可以使用不同的数据类型?

    我有这个查询 SELECT CASE WHEN dbo CFE PPHY P77 IS NOT NULL OR dbo CFE PPHY P77 lt gt THEN MONTH dbo CFE PPHY P77 WHEN dbo CFE
  • 直接使用GET和POST有哪些漏洞?

    我想知道有哪些漏洞而直接使用 GET 和 POST 变量 即没有修剪和addslashes函数和mysql转义字符串之类的东西 我的问题是 我们还需要照顾什么在使用 GET 和 POST 时 有哪些类型的攻击比如SQL注入 一般来说 不仅限
  • 将字符串转换为类对象[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用将类对象存储到字符串中toSt
  • 如何将一个巨大的文件分割成多个单词?

    如何从文本文件中读取很长的字符串 然后对其进行处理 拆分为单词 我尝试过StreamReader ReadLine 方法 但我得到了OutOfMemory例外 显然 我的队伍非常长 这是我的读取文件的代码 using var streamR
  • 日期范围内的日期范围

    实际上这个任务对我来说似乎很容易 但我有点卡住了 非常感谢一些提示 D 我有一些带有开始和结束时间的事件 我想创建一个包含日历周的表格 因此 我编写了一个方法来检查本周内是否有事件 并将其着色如下 private boolean inWee
  • 通过 f11 启用全屏后通过 javascript 禁用全屏

    通过按下面的按钮 我可以启用和禁用全屏模式 但按下 f12 后 我无法禁用全屏模式 我参考了其他答案 他们只提供了一种方法来检测窗口是否处于全屏模式 我是无法获取从全屏禁用全屏模式的代码 通过 f11 键制作 我尝试通过代码触发 f11 但
  • 以 PDF 形式通过电子邮件发送 Google 表格

    我有这个脚本 它通过电子邮件向我发送 Google 电子表格的 PDF 我只希望它通过电子邮件将第一个 选项卡 发送给我 如果可能的话 将其作为单个 PDF 或 zip 文件发送给我 想知道是否有人可以提供帮助 另外 其中一个 选项卡 是隐
  • 使用 Rcpp 将目标文件链接到函数的简化示例[重复]

    这个问题在这里已经有答案了 我现有的 C 代码由三个文件组成 头文件 h 文件 库文件 o 文件 和源文件 它们目前在 UNIX 下运行 并在 Matlab 中编译为 mex 文件 我想使用 Rcpp 将它们移植到 R 它们都又长又复杂 所
  • R中的随机森林对训练数据的大小有限制吗?

    我正在使用我的训练数据训练随机森林 该数据有 114954 行和 135 列 预测变量 我收到以下错误 model lt randomForest u b stars data traindata importance TRUE do tr
  • 可以通过 XML 定义 bean 构造型吗?

    是否可以通过 XML 定义 bean 构造型 如下
  • 在 pandas 中高效使用替换

    我正在寻找使用replace在 python3 中以有效的方式运行 我拥有的代码正在完成任务 但速度太慢 因为我正在处理大型数据集 因此 每当需要权衡时 我的首要任务是效率而不是优雅 这是我想做的一个玩具 import pandas as
  • listview onScroll 方法中某些项目为空

    我有一个列表视图 我重写了它的 onScroll 事件 以便我可以获取列表视图的第一个可见项目上的文本的第一个字符 我的代码如下 Override public void onScrollStateChanged AbsListView v
  • Material-ui 工具提示无法正常工作

    我正在尝试使用material ui 工具提示 我希望工具提示显示在顶部 即使设置后placement top 演示可以找到here https codesandbox io s yjrq3lkk29 我在这里做错了什么 因为页面没有足够的
  • 仅允许在 WPF 文本框中输入数字

    我想验证用户输入以确保它们是整数 我该怎么做 我想用IDataErrorInfo这似乎是在 WPF 中进行验证的 正确 方法 所以我尝试在我的 ViewModel 中实现它 但问题是我的文本框绑定到一个整数字段 并且不需要验证是否int i
  • 多指标散点图

    假设我有以下数据 data Value 1 1 3 0 1 2 4 0 1 3 51 0 1 4 10 0 1 5 2 0 1 6 17 0 1 7 14 0 1 8 7 0 1 9 2 0 1 10 1 0 df pd DataFrame
  • 在不同的子域上使用 Socket.IO 服务器和客户端

    我有两个子域 socket mydomain com Socket IO 服务器 app mydomain com 我想连接到我的网络套接字的网络应用程序 在 app mydomain com 的登陆页面中 我已链接到 Socket IO
  • 使用 IIS-Express 激活压缩(尤其是动态压缩)

    是否可以在 IIS Express 上启用动态压缩 针对 WCF 服务 这是一个开发环境问题 因此我无法使用完整版本 但我需要弄清楚它在压缩时的表现如何 进入 IIS Express 安装文件夹 programfiles IIS Expre
  • 如何在最新的Next.js中获取服务器端数据?尝试了 getStaticProps 但它没有运行并且未定义

    我正在使用 Next js 开发 Django Rest 框架 但我陷入了从 API 获取数据的困境 我在这个网址中有数据http 127 0 0 1 8000 api campaigns当我访问该网址时 我会看到数据 问题是当我使用 Ne