Next.js Dynamic Routing - How to Get StaticProps and GetStaticPaths in [slug].js?
6 replies
Last updated: Jun 20, 2022
A
Hey all, I'm not sure if my question is more related to Sanity or Nextjs dynamic routing but I'll ask anyway:
I have a parent page (
pages/numeros/index.js
) that renders two types of content (listing posts w/ schema "numeros" and "archive"). When clicking into a numero or archive article, both schema should render into
numeros/[slug].js
with the same styling and formatting, since both schema contain the exact same data fields (for all intents and purposes they're the same thing, one is just reserved for their archived 'numeros' publications and as such is categorized differently on the
numeros/index.js
page). I'm getting the numeros schema to render properly, but when I click into an archive post I get the following error, because I'm not sure how to handle the slug parameter in
getStaticProps
and
getStaticPaths
for both schema at once. So the question is, how should I go about allowing for two data input streams for
I'm not sure how I should go about this, because I can't just add in
getStaticProps
for instance, as I would have two declarations of
numero
.
const numero = await client.fetch(archiveListQuery, {
slug: params.slug,
});
Jun 17, 2022, 10:40 PM
K
There is a lot to unpack here.
Jun 18, 2022, 8:48 AM
K
First gut feeling: if both content types are essentially the same, they should be the same collection, not two different ones. It feels like you’re making your work harder right now.
Jun 18, 2022, 8:49 AM
K
If your page can fetch documents from two different types, it seems that you can just update your query to select from 2 types. So instead of
_type == "numero"
, it would be
_type in ["numero", "archive"]
.
Jun 18, 2022, 8:50 AM
K
This can be done in both the
getStaticPaths
and the
getStaticProps
functions so you get either a numero or an archive based on the slug.