Javascript 如何捕获GetStaticPath中的所有参数
目前,我正在开发一个应用程序,需要使用以下url预先呈现页面:Javascript 如何捕获GetStaticPath中的所有参数,javascript,reactjs,next.js,server-side-rendering,Javascript,Reactjs,Next.js,Server Side Rendering,目前,我正在开发一个应用程序,需要使用以下url预先呈现页面:/challenge/:id/:activeState我做的第一件事是在页面目录中创建一个质询文件夹。在文件夹中,我创建了一个[…slug].tsx文件来捕获剩余的url,到目前为止,很好,我可能有多个具有不同ID的页面,每个页面都有不同的状态,因此我这样做: import React from 'react' import ChallengeLayout from 'components/layouts/challenge-layo
/challenge/:id/:activeState
我做的第一件事是在页面
目录中创建一个质询文件夹。在文件夹中,我创建了一个[…slug].tsx
文件来捕获剩余的url,到目前为止,很好,我可能有多个具有不同ID的页面,每个页面都有不同的状态,因此我这样做:
import React from 'react'
import ChallengeLayout from 'components/layouts/challenge-layout'
import useSWR from 'swr'
import { useRouter } from 'next/router'
import { ChallengeDescription } from 'components/challenge-description/challenge-description'
import { content } from 'data/description-content'
import { getProgram, getPrograms, programEndpoint, getStages } from 'api/api'
const getDataSwr = (endpoint, fetchMethod, initialData) => {
const result = useSWR(endpoint, fetchMethod, { initialData: initialData })
return result.data
}
const ChallengePage: any = ({ program }) => {
const router = useRouter()
const programData = getDataSwr(programEndpoint(router.query.slug[0]), getProgram, program)
return (
<ChallengeLayout program={programData}>
<ChallengeDescription content={content} />
</ChallengeLayout>
)
}
export async function getStaticPaths() {
const response: any = await getPrograms()
const paths = response.results.map(async result => {
const stagesResponse: any = await getStages(result.id)
const stages = stagesResponse.map(stage => stage.id)
return { params: { slug: result.id.toString(), another: 'asd' } }
})
return { paths, fallback: false }
}
export async function getStaticProps({ params }) {
const res = await getProgram(params.slug)
return { props: { program: res }, revalidate: 1 }
}
export default ChallengePage
首先,我获取所有程序,从中提取每个id,因此基本上基于程序显示一个页面,然后对于特定程序的每个阶段,我需要为每个阶段名称创建一个新页面
有什么帮助吗
目前我收到了以下错误:
中未提供作为数组的必需参数(slug)
GetStaticPath for/challenge/[…slug]
明白了吗?我也有同样的问题
export async function getStaticPaths() {
const response: any = await getPrograms()
const paths = response.results.map(async result => {
const stagesResponse: any = await getStages(result.id)
const stages = stagesResponse.map(stage => stage.id)
return { params: { slug: result.id.toString(), ...stage.name } }
})
return { paths, fallback: false }
}