尝试获取数据来创建菜单,getStaticProps 返回未定义

2023-12-21

我正在使用 Next.js 13 和 Strapi,我想做一个Menu组件使用getStaticProps.

我创建并添加了一个Layout组件中的_app.js. And a Menu里面的组件Layout.

我测试了里面的代码getStaticProps,并且它返回预期的 json 响应。

_app.js:

import '../styles/globals.css'
import 'bootstrap/dist/css/bootstrap.css'
import Layout from './components/Layout'

export default function App({ Component, pageProps }) {
  return (
    <Layout>
      <Component {...pageProps} />
    </Layout>
  )
}

布局.js

import Menu from './Menu'
import Footer from './Footer'

export default function Layout({ children}) {

  return (
    <>
      <Menu />
      <main>{children}</main>
      <Footer />
    </>
  )
}

Menu.js:

const Menu = async ({ dataMenu }) => {

  console.log(dataMenu);

  const renderMenuItems = (items) => {
    return items.map((item) => (
      <li key={item.id}>
        <Link href={item.attributes.url}>
          <a>{item.attributes.title}</a>
        </Link>
        {item.attributes.children.data.length > 0 && (
          <ul>{renderMenuItems(item.attributes.children.data)}</ul>
        )}
      </li>
    ));
  };

  return (
    <nav>
      <ul>{renderMenuItems(dataMenu)}</ul>
    </nav>
  );
};

export async function getStaticProps() {
  const urlParamsObject = {
    nested: "",
    populate: "*",
  }
  const queryString = qs.stringify(urlParamsObject);
  const { data } = await api.get(`/menus/1${queryString ? `?${queryString}` : ""}`);
  const dataMenu = data.data;

  return { props: { dataMenu } };
}

当我尝试console.log() the dataMenu我有数据undefined。有人可以告诉我为什么我会遇到这个问题吗? 谢谢。


getStaticProps仅适用于内部页面组件pages文件夹。 这是什么doc https://nextjs.org/docs/basic-features/data-fetching/get-static-props#where-can-i-use-getstaticprops says:

getStaticProps只能从page. You cannot从非页面文件导出它,_app, _document, or _error.

你可以做什么来保持你当前的结构,Menu调用一次,并在服务器上渲染是获取菜单数据_app using getInitialProps并将其作为道具传递给Layout,然后到Menu,如下所示。

_app.js:

import '../styles/globals.css'
import 'bootstrap/dist/css/bootstrap.css'
import Layout from './components/Layout'
import App from "next/app";

export default function MyApp({ Component, pageProps, dataMenu }) {
  return (
    <Layout dataMenu={dataMenu}>
      <Component {...pageProps} />
    </Layout>
  )
}

MyApp.getInitialProps = async (context) => {
  const urlParamsObject = {
    nested: "",
    populate: "*",
  }
  const queryString = qs.stringify(urlParamsObject);
  const { data } = await api.get(`/menus/1${queryString ? `?${queryString}` : ""}`);
  const dataMenu = data.data;
  const pageProps = await App.getInitialProps(context);

  return { ...pageProps, dataMenu: dataMenu};
};

布局.js:

import Menu from './Menu'
import Footer from './Footer'

export default function Layout({ children, dataMenu}) {

  return (
    <>
      <Menu dataMenu={dataMenu} />
      <main>{children}</main>
      <Footer />
    </>
  )
}

Menu.js:

const Menu = async ({ dataMenu }) => {

  console.log(dataMenu);

  const renderMenuItems = (items) => {
    return items.map((item) => (
      <li key={item.id}>
        <Link href={item.attributes.url}>
          <a>{item.attributes.title}</a>
        </Link>
        {item.attributes.children.data.length > 0 && (
          <ul>{renderMenuItems(item.attributes.children.data)}</ul>
        )}
      </li>
    ));
  };

  return (
    <nav>
      <ul>{renderMenuItems(dataMenu)}</ul>
    </nav>
  );
};

⚠️:确保从正确的位置导入所有内容。

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

尝试获取数据来创建菜单,getStaticProps 返回未定义 的相关文章

  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 使用 jQuery/JS 打开时使
    标签的内容具有动画效果

    我只想要 HTML5 的内容details标记为 滑行 动画打开 而不是仅仅弹出打开 立即出现 这可以用 jQuery Javascript 实现吗 Fiddle http jsfiddle net 9h4Hq HTML
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在requestAnimationFrame中使用clearRect不显示动画

    我正在尝试在 HTML5 画布上做一个简单的 javascript 动画 现在我的画布是分层的 这样当我收到鼠标事件时 背景层不会改变 但带有头像的顶层会移动 如果我使用 requestAnimationFrame 并且不清除屏幕 我会看到
  • 如何将 Google Charts 与 Vue.js 库一起使用?

    我正在尝试使用 Vue js 库使用 Google Charts 制作图表 但我不知道如何添加到 div 这是我尝试做的 这是如何使用普通 javascript 添加图表 这是文档的代码示例 https developers google
  • Jquery/Javascript 上传和下载文件,无需后端

    是否可以在没有后端服务器的情况下在 JavaScript 函数中下载和上传文件 我需要导出和导入由 JavaScript 函数生成的 XML 我想创建按钮 保存 xml 来保存文件 但我不知道是否可行 另一方面 我希望将 XML 文件直接上
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • 如何使用tampermonkey模拟react应用程序中的点击?

    我正在尝试使用 Tampermonkey 脚本模拟对 React 元素的点击 不幸的是 由于 React 有自己的影子 DOM 所以天真的方法使用document querySelector 不工作 我遇到了一些需要修改 React 组件本
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 为什么在 Internet Explorer 中访问 localStorage 对象会引发错误?

    我正在解决一个客户端问题 Modernizr 意外地没有检测到对localStorageInternet Explorer 9 中的对象 我的页面正确使用 HTML 5 文档类型 并且开发人员工具报告该页面具有 IE9 的浏览器模式和 IE
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不
  • Javascript 纪元时间(以天为单位)

    我需要以天为单位的纪元时间 迄今为止 我已经看到过有关如何翻译它的帖子 但几天后就没有了 我对纪元时间很不好 我怎么能得到这个 我需要以天为单位的纪元时间 我将解释为您想要自纪元以来的天数 纪元本身是第 0 天 或第 1 天的开始 无论您如
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交

随机推荐

  • 如何使用jquery在加载时滑动整个页面

    我想在更改时将整个页面向下滑动 我想做到这一点的方法是创建一个垂直幻灯片 在单击链接时播放 并在页面加载时再次播放 到目前为止 我只能创建影响特定 DIV 的幻灯片 我还希望它能够垂直滑入 任何想法将不胜感激 只需将所有内容包装在一个 di
  • 为什么应该仅在 1 个元素张量上或使用变量的梯度来调用向后函数?

    我是 pytorch 的新手 我想了解为什么我们不能对包含大小为 2 2 的张量的变量调用后向函数 如果我们确实想在包含大小为 2 2 的张量的变量上调用它 我们必须首先定义一个梯度张量 然后在包含张量 w r t 定义的梯度的变量上调用后
  • C# 如何使用 DataAnnotations StringLength 和 SubString 删除文本

    我有一个模型类 它有一个描述属性 其数据注释属性为 StringLength 长度设置为 100 个字符 当此属性超过 100 个字符并且实体框架尝试保存此属性时 我收到以下错误 StringLength 100 ErrorMessage
  • SQL:条件 AND in where

    我正在尝试创建一个允许省略参数的存储过程 但如果提供了参数则进行 AND 操作 CREATE PROCEDURE MyProcedure LastName Varchar 30 NULL FirstName Varchar 30 NULL
  • Apache Commons CLI - 订购帮助选项?

    我正在使用 Apache Commons CLI 默认情况下 它按字母顺序对命令行上的帮助选项进行排序 那么 出现的就是 csv ip msisdn xml 但我想按如下方式订购它们 csv xml ip msisdn 我知道您可以使用一个
  • 通过 Access 中的 ODBC 链接表更新 SQLite 数据库

    我在使用 SQLite 数据库时遇到问题 我正在使用 SQLite ODBChttp www ch werner de sqliteodbc http www ch werner de sqliteodbc 安装 64 位版本并使用以下设置
  • OpenERP (Odoo) 在哪里找到模块路径?

    我正在使用 Odoo v 8 我想找出 Odoo 在哪里找到模块所在的信息并加载它们 我知道文件 openerp server conf 中有一个变量 addons path 我找到该变量的唯一文件是 opt odoo odoo debia
  • Python:按索引过滤列表

    在Python中我有一个元素列表aList和索引列表myIndices 有什么方法可以一次检索所有这些项目aList将以下值作为索引myIndices Example gt gt gt aList a b c d e f g gt gt g
  • 在 JavaScript 中保存哈希/锚点更改的历史记录

    我目前正在实现一个 JavaScript 库 用于跟踪地址栏中哈希部分的更改历史记录 这个想法是 您可以在哈希部分保留一个状态 然后使用后退按钮返回到之前的状态 在大多数最新的浏览器中 这是自动的 您只需轮询location hash属性进
  • npm run 运行缓慢

    我曾经通过 Makefile 运行各种命令 但对于 Nodejs 项目来说 package json 是更合适的地方 通过 npm 运行命令效果很好 但与命令时间执行相比非常慢 time node modules bin jshint no
  • IIS 7.5 修复尝试加载格式不正确的程序问题?

    我遇到一个异常问题 抛出异常 尝试加载格式不正确的程序 错误 我在同一台 IIS 服务器上有两个相同的网站 我的构建配置适用于其中一个 但不适用于另一个 我的 C MVC 2 Web 应用程序可以部署到驻留在同一 IIS 7 5 Web 服
  • 有没有比 dict() 更快的东西?

    我需要一种更快的方式来存储和访问大约 3GB 的数据k v对 在哪里k是一个字符串或一个整数并且v is an np array 可以有不同的形状 是否有任何对象在存储和访问这样的表时比标准 python 字典更快 例如 一个pandas
  • SceneKit 在立方体测试中的性能

    在学习游戏 3D 图形编程时 我决定从使用 Scene Kit 3D API 开始简单 我的第一个游戏目标是构建一个非常简化的 我的世界 的模仿版 一个只有立方体的游戏 这有多难 下面是我编写的一个循环 用于放置 100 x 100 立方体
  • Fragments 中的“onViewStateRestored”如何工作?

    我真的对 Fragment 的内部状态感到困惑 我有一个活动一次只保存一个片段 并在应该显示另一个片段时替换它 来自文档onSaveInstanceState叫做ONLY如果活动onSaveInstanceState正在被调用 在我的例子中
  • 预加载图像的最佳方式

    预加载图像的最佳方法是什么 我正在尝试创建一个包含大约 59 张 png 图像的图像选项卡 这是我到目前为止的代码
  • 当 SBValue 来自 Swift 字典时,SBData 是错误的

    我正在尝试编写一个Python函数来格式化Foundation Decimal 用作类型摘要器 我把它发布在这个答案 https stackoverflow com a 52749749 77567 我还将它包含在这个答案的底部 并带有额外
  • GCC 使用 typedef 不兼容的指针类型

    我有一些代码在 GCC 4 8 4 下编译得很好 我最近升级了我的系统 现在有了 GCC 5 2 1 并且我收到了有关不兼容指针类型的警告 我已将问题提取到一个重现错误的小示例中 typedef const double ConstSpic
  • 如何计算当前行与下一行?

    在 Spark Sql 1 6 版本中 使用DataFrames 有没有一种方法可以计算特定列的每一行的当前行和下一行的总和 例如 如果我有一个只有一列的表 如下所示 Age 12 23 31 67 我想要以下输出 Sum 35 54 98
  • 如何在不损失质量的情况下放大微小的文本图像?

    文本图像非常小 大小为 17px x 10px MacOS下可以完美放大 let width scale image size width kScale let height scale image size height kScale s
  • 尝试获取数据来创建菜单,getStaticProps 返回未定义

    我正在使用 Next js 13 和 Strapi 我想做一个Menu组件使用getStaticProps 我创建并添加了一个Layout组件中的 app js And a Menu里面的组件Layout 我测试了里面的代码getStati