Render Storyblok Stories Dynamically in Nuxt
Storyblok is the first headless CMS that works for developers & marketers alike.
Having successfully integrated Storyblok into our Nuxt app in the last tutorial, let’s know take it one step further and add dynamically rendered pages as well as a page layout.
If you’re in a hurry, have a look at our live demo in Stackblitz! Alternatively, you can explore or fork the code from the Nuxt Ultimate Tutorial GitHub Repository.
Requirements
This tutorial is part 2 of the Ultimate Tutorial Series for Nuxt. We recommend that you follow the previous tutorial before starting this one.
Creating a Layout
Before creating additional pages in Storyblok, let’s first of all create a layout in our Nuxt app. This layout should include a header bar and a primary navigation for our website – because having multiple pages without being able to navigate between them doesn’t make much sense, does it?
So let’s start by creating a header component. Since this won’t have a corresponding blok in our Storyblok space, we’ll create it in the components
folder:
Now we can implement this header component in our layout. Fortunately, Nuxt allows us to create layouts very easily. All we have to do is to create a default.vue
in a layouts
folder with the following content:
And that’s it! If you take a look at your project running on https://localhost:3000 now, you’ll see your header component:
Rendering Pages dynamically
Before actually creating any new pages in the Storyblok space, let’s take care of the required logic on the frontend side.
Once again, Nuxt makes it extremely easy for you. All we have to do is to delete our pages/index.vue
and replace it with a pages/[...slug].vue
.
So, what’s happening here? We’re dynamically getting the current slug via the useRoute
function. This is then passed as a parameter to the useAsyncStoryblok
function. If the slug is empty, we want our Home story to be displayed.
Now you can provide a name {1} – the slug will be filled out automatically for you. Let’s start with the About page.
Once the page is created, you can add nestable bloks to it. Simply click on the Plus Icon {1} and add a Teaser component {2}.
Now you can enter any headline you want for your newly created About page:
Try to repeat the same process on your own for the Blog page.
Bonus: Highlighting the currently active navigation item
If you click on the navigation entries in our Header component, everything already works as expected. Let’s take it a little further by highlighting the currently active navigation item. Yet again, this is extremely easy to accomplish in Nuxt because it automatically adds a router-link-active
class to your links! Let’s utilize it by adding the following styles to the Header component:
Wrapping Up
Congratulations! You have created your first pages in Storyblok and they are rendered in your Nuxt app dynamically – how cool is that!?
Continue reading and find out How to create Dynamic Menus in Storyblok and Nuxt. Not interested in dynamic menus? Feel free to skip this part and learn How to Create Custom Components in Storyblok and Nuxt.
Resource | Link |
---|---|
Storyblok Nuxt 3 Ultimate Tutorial | https://www.storyblok.com/tp/storyblok-nuxt-ultimate-tutorial |
Storyblok Nuxt 3 Module | https://github.com/storyblok/storyblok-nuxt |
Storyblok Nuxt Technology Hub | https://www.storyblok.com/tc/nuxtjs |
Storyblok APIs | https://www.storyblok.com/docs/api |
Nuxt 3 | https://v3.nuxtjs.org/ |