📖 Scenario: You are building a simple static website for a local bakery. The site will show a list of bakery items with their names and prices. You want to use Nuxt's static site generation feature to pre-render the pages for fast loading and SEO benefits.
🎯 Goal: Create a Nuxt app that statically generates a page listing bakery items with their names and prices.
📋 What You'll Learn
Create a data array of bakery items with exact names and prices
Add a configuration variable for currency symbol
Use Nuxt's asyncData to load the bakery items
Render the list of bakery items with their prices and currency symbol in the template
💡 Why This Matters
🌍 Real World
Static site generation is used to create fast, SEO-friendly websites that do not require a server to render pages on each request. This is common for blogs, portfolios, and small business sites like bakeries.
💼 Career
Understanding static site generation with Nuxt is valuable for frontend developers working with Vue.js frameworks, enabling them to build performant and accessible websites.
Progress0 / 4 steps
1
Create bakery items data array
Create a constant array called bakeryItems with these exact objects: { name: 'Croissant', price: 2.5 }, { name: 'Baguette', price: 3.0 }, and { name: 'Eclair', price: 4.0 }.
Vue
Hint
Use const bakeryItems = [ ... ] with objects inside the array.
2
Add currency symbol configuration
Add a constant called currencySymbol and set it to the string '€'.
Vue
Hint
Use const currencySymbol = '€' to set the currency symbol.
3
Use asyncData to load bakery items
Inside the default export of your Nuxt page component, add an asyncData method that returns an object with items set to the bakeryItems array.
Vue
Hint
Define async asyncData() that returns { items: bakeryItems }.
4
Render bakery items list with prices
In the template section of your Nuxt page, add a <ul> that uses v-for to loop over items. For each item, display the name and the price prefixed by currencySymbol. Use :key with item.name for list rendering.
Vue
Hint
Use <ul> with <li v-for="item in items" :key="item.name"> and show name and price with currencySymbol.
Practice
(1/5)
1. What does static site generation (SSG) in Nuxt do before users visit the site?
easy
A. Requires a server to render pages on demand
B. Generates pages dynamically on each user request
C. Builds all pages ahead of time as static files
D. Only builds the homepage statically
Solution
Step 1: Understand static site generation concept
Static site generation means creating all pages before users visit, so they are ready as static files.
Step 2: Apply to Nuxt behavior
Nuxt with static target builds all pages ahead, not on demand or partially.
Final Answer:
Builds all pages ahead of time as static files -> Option C
Quick Check:
SSG = Pre-build pages [OK]
Hint: SSG means pre-building pages before user visits [OK]
Common Mistakes:
Confusing static generation with server-side rendering
Thinking pages build on each request
Assuming only homepage is static
2. Which Nuxt configuration option enables static site generation?
easy
A. target: 'static'
B. mode: 'universal'
C. ssr: false
D. buildModules: ['@nuxt/static']
Solution
Step 1: Identify Nuxt config for static generation
Nuxt uses target: 'static' to enable static site generation.
Step 2: Check other options
ssr: false disables server-side rendering but does not enable static generation; mode is deprecated; buildModules with '@nuxt/static' is invalid.
Final Answer:
target: 'static' -> Option A
Quick Check:
Static target = 'static' [OK]
Hint: Look for target set to 'static' in config [OK]
Common Mistakes:
Using ssr: false instead of target: 'static'
Confusing mode with target
Assuming buildModules enables static
3. Given this Nuxt config snippet, what will be the output folder after running nuxt generate?
The generate.dir option sets the output folder for static files.
Step 2: Apply config values
Since dir: 'public' is set, the static files will be generated inside a folder named 'public'.
Final Answer:
A folder named 'public' will be created -> Option D
Quick Check:
generate.dir = output folder [OK]
Hint: generate.dir sets output folder name [OK]
Common Mistakes:
Assuming default 'dist' folder is always used
Confusing generate.dir with buildDir
Thinking no folder is created
4. You run nuxt generate but your dynamic routes are missing from the static site. What is the likely cause?
medium
A. You forgot to add the dynamic routes in generate.routes
B. You set target to 'server' instead of 'static'
C. You did not install the Nitro preset
D. You used ssr: false in config
Solution
Step 1: Understand dynamic routes in static generation
Nuxt needs explicit dynamic routes listed in generate.routes to pre-build them.
Step 2: Check other options
target: 'server' disables static generation but does not explain missing dynamic routes if static is used; Nitro preset is internal; ssr: false disables SSR but not related to dynamic routes generation.
Final Answer:
You forgot to add the dynamic routes in generate.routes -> Option A
Quick Check:
Dynamic routes need generate.routes [OK]
Hint: Add dynamic routes in generate.routes to include them [OK]
Common Mistakes:
Assuming dynamic routes are auto-detected
Confusing ssr: false with static target
Thinking Nitro preset fixes missing routes
5. You want to build a blog with Nuxt static generation. Your posts are fetched from an API at build time. Which approach correctly generates static pages for each post?
hard
A. Fetch posts only on client side with mounted() and rely on client rendering
B. Use asyncData to fetch posts and list them, then add dynamic routes in generate.routes to pre-build each post page
C. Set ssr: false and generate pages dynamically on server
D. Use fetch() in components without configuring generate.routes
Solution
Step 1: Fetch posts at build time
Using asyncData fetches posts during build, enabling static generation.
Step 2: Configure dynamic routes for posts
Adding post URLs in generate.routes tells Nuxt to pre-build each post page as static HTML.
Step 3: Evaluate other options
Client-side fetching delays content and is not static; ssr: false disables server rendering; fetch() without generate.routes won't pre-build dynamic pages.
Final Answer:
Use asyncData and generate.routes to pre-build each post page -> Option B