💨

Nextjs×Prisma×SQLiteでreadする方法(その3)

2022/12/22に公開約2,400字
./pages/post/[id].tsx
import prisma from "@utils/prisma"
import { Post } from "@utils/types"

export default function Content({post}:{post:Post}) {
    return(
        <div>
            <p>{post.id}</p>
            <p>{post.title}</p>
            <p>{post.content}</p>
        </div>
    )
}
export async function getServerSideProps({params}:{params:{id:number}}) {
    const post = await prisma.post.findUnique({
        where: {
            id: Number(params.id)
        }
    })
    return {
        props: {
            post: post 
        }
    }
}

前回取得したidからfindUniqueを使ってidと合致したpostを取得します。

export async function getServerSideProps({params}:{params:{id:number}}) {
    const post = await prisma.post.findUnique({
        where: {
            id: Number(params.id)
        }
    })
    return {
        props: {
            post: post 
        }
    }
}

取得したpostデータをhtmlで表示しています。

export default function Content({post}:{post:Post}) {
    return(
        <div>
            <p>{post.id}</p>
            <p>{post.title}</p>
            <p>{post.content}</p>
        </div>
    )
}

このままだと、毎回urlを叩かないといけないので、前々回の全データ取得画面にLinkを貼って、そこから飛べるようにします。

./pages/post/index.tsx
import prisma from "@utils/prisma"
import Link from "next/link"
import { Post } from "@utils/types"

export default function Home({posts}:{posts:Post[]}) {
  return(
    <ul>
      {
        posts.map((post:Post)=>(
          <li key={post.id}>
            <Link href={`/post/${post.id}`}>
              <p>{post.id}</p>
              <p>{post.title}</p>
              <p>{post.content}</p>
              <p>{post.published}</p>
            </Link>
          </li>
        ))
      }
    </ul>
  )
}

export async function getServerSideProps() {
  const posts = await prisma.post.findMany()
  return {
    props: {
      posts:posts,
    }
  }
}

NextjsのLinkを使ってリンクを貼ります。

import Link from "next/link"

/post/${post.id}とすることで、各idのデータへのリンクが貼れます。

      {
        posts.map((post:Post)=>(
          <li key={post.id}>
            <Link href={`/post/${post.id}`}>
              <p>{post.id}</p>
              <p>{post.title}</p>
              <p>{post.content}</p>
              <p>{post.published}</p>
            </Link>
          </li>
        ))
      }

これで1つのデータを取得することができました。

次回は、データの更新をしてみようと思います。

Discussion

ログインするとコメントできます