Closed1
【Next.js Appsync】ダイナミックルーティング×Appsync
何について書く?
動的ルーティングでデータを取ってくる。
内容
- まずは結論から。SSGでかつ事前のフェッチを行わない形(通常の関数コンポーネント)で実装。
page/hoge/[id].tsx
import React, { useEffect } from 'react'
import { useRouter } from 'next/router'
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'
import { useAuth } from '@/useAuth'
//API Manage
import API, { graphqlOperation, GraphQLResult } from '@aws-amplify/api'
import { GetDataQuery } from '@/API'
import { getData } from '@/graphql/queries'
//State Manage
import { useStateIfMounted } from 'use-state-if-mounted'
const Test = () => {
const router = useRouter()
const { id } = router.query
const { isLoaded, userInfo } = useAuth() //ログイン情報管理⇒以前の記事参照https://zenn.dev/hirof1990/scraps/5cf4702947ec4b
const [data, setData] = useStateIfMounted(null)
useEffect(() => {
const fetchData = async () => {
if (!isLoaded) return
if (!userInfo) {
router.push('/')
return
}
const data = {
//TODO refactor required
company: (await API.graphql(
graphqlOperation(getData, {id: id})
)) as GraphQLResult<GetDataQuery>,
}
setData(data)
}
fetchData()
}
,[isLoaded, userInfo])
return (
<div class>
{data===null ? <></> :
<>
{data.name}
</>
}
</div>
)
}
export default Test
- これによりデータ取得時にNo current userとなることもなく、簡単に動的ルーティングが可能となる。
参考サイト
このスクラップは2022/04/17にクローズされました