javascript - 从本地 json 文件创建动态路由 nextjs 13

标签 javascript reactjs json next.js fetch

我有一个本地 JSON 文件,它是一个对象数组,例如:

项目.json

[
   {"id":0,
    "title":"this is the title",
    "info":"here is more info",
    "img":"www.imagelink.com"},
     ...
     ...
   {"id":10,
    "title":"this is the title",
    "info":"here is more info",
    "img":"www.imagelink.com"},
]

我的目标是映射这个对象并为每个对象提供一个单独的页面链接。现在我已经把它作为一个设置了。具有动态 URL 的链接,每个对象都是不同的。

项目.tsx

<div className='projects-container'>
      {projectlist.map((project)=>{
        return(
            <Link href={`/${project.id}`}>
              <img src={project.img} alt="this is an image" />
            </Link>
        )
      })}
    </div>

我无法弄清楚如何将所有 Prop 传递到每个动态路由,以便当用户单击该页面时,他们将被定向到一个包含所有这些信息设置的页面,例如。

[唯一页面]/page.tsx

export default function UniquePage() {
  return (
    <div>
      {projectlist.map(project=>{
        return(
          <p>ID Here:{project.id}</p>
          <p>Title Here:{project.title}</p>
          <p>Info Here:{project.info}</p>
        )
      })}
    </div>
  )
}

我遵循的所有指南都是基于从 API 和异步函数获取数据。由于 json 文件位于本地目录中,我不需要异步函数。

最佳答案

您无法将 props 传递到页面,除非您使用 cookie 或 localStorage 进行一些复杂的路由。

正确的方法是从同一个 json 中获取详细信息页面中的数据,并使用 uniquepage 作为 id。如果具有该 uniquepage 的项目不存在,您将抛出 notFound() ,从而导致 404 页面。

使用generateStaticParams静态预构建页面。不是必需的,但会加快加载速度。

project/page.tsx

import projectlist from '@/app/projects.json'
import Link from "next/link";

export default function Home() {
  return (
    <main>
      {projectlist.map((project) => (
        <Link key={project.id} href={`/${project.id}`}>
          <img src={project.img} alt="this is an image" />
        </Link>
      ))}
    </main>
  )
}

project/[uniquepage]/page.tsx

import projectlist from '@/app/projects.json'
import {notFound} from "next/navigation";

export async function generateStaticParams() {
  return projectlist.map((p) => ({
    uniquepage: p.id.toString(),
  }))
}

export default function UniquePage({params: {uniquepage}}: { params: { uniquepage: string } }) {
  const project = projectlist.find(p => p.id.toString() === uniquepage)
  if (!project) {
    notFound()
  }

  return (
    <main>
      <p>ID Here:{project.id}</p>
      <p>Title Here:{project.title}</p>
      <p>Info Here:{project.info}</p>
    </main>
  )
}

关于javascript - 从本地 json 文件创建动态路由 nextjs 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76650404/

相关文章:

javascript - AJAX 和后退按钮

javascript - AJAX代码澄清

json - 用 Aeson 解析复杂的 json

python - 按子字符串聚合 json 元素

javascript - nw.js 的多部分/表单数据请求

javascript - 我该如何做才能使路径在内容下方延伸?

javascript - 如何使用输入类型范围读取属性目标

javascript - 语义 UI React : fixed sidebar & header

reactjs - 使用 react.js 和 promise 解析错误 : Unexpected token, 预期为 ","

Java 在不使用引号的情况下向 json 对象添加函数。