📖 Scenario: You are building a simple website that supports switching between English and Spanish languages. Users can click buttons to change the displayed greeting message.
🎯 Goal: Create a Next.js functional component that shows a greeting message in English or Spanish. Add buttons to switch the language dynamically.
📋 What You'll Learn
Create a React functional component named LanguageSwitcher
Use useState hook to store the current language
Display a greeting message that changes based on the selected language
Add two buttons labeled English and Spanish to switch languages
Update the greeting message immediately when a button is clicked
💡 Why This Matters
🌍 Real World
Language switching is common in websites to support users from different countries. This UI lets users pick their preferred language easily.
💼 Career
Understanding how to manage state and update UI in React is essential for frontend developers building interactive web apps.
Progress0 / 4 steps
1
Set up the initial greetings data
Create a constant object called greetings with two keys: en and es. Set en to the string 'Hello!' and es to the string '¡Hola!'.
NextJS
Hint
Use a JavaScript object with keys en and es and their respective greeting strings.
2
Add state to track the current language
Inside a React functional component named LanguageSwitcher, use the useState hook to create a state variable called language initialized to 'en'.
NextJS
Hint
Import useState from React and call it inside the component to create language and setLanguage.
3
Display the greeting message based on current language
Inside the LanguageSwitcher component, return a <div> that contains a <p> element. The <p> should display the greeting message from greetings using the current language state.
NextJS
Hint
Use curly braces inside JSX to show the greeting for the current language.
4
Add buttons to switch languages
Inside the LanguageSwitcher component's returned <div>, add two <button> elements labeled English and Spanish. Add onClick handlers to these buttons that call setLanguage('en') and setLanguage('es') respectively to update the language state.
NextJS
Hint
Add two buttons with onClick handlers that call setLanguage with the correct language code.
Practice
(1/5)
1. What is the main purpose of a language switching UI in a Next.js app?
easy
A. To let users choose their preferred language for the app content
B. To change the app's theme colors
C. To update the user's profile picture
D. To log out the user automatically
Solution
Step 1: Understand the UI purpose
A language switching UI is designed to let users pick their language preference.
Step 2: Match purpose to options
Only To let users choose their preferred language for the app content describes changing language, others are unrelated to language switching.
Final Answer:
To let users choose their preferred language for the app content -> Option A
Quick Check:
Language switching UI = Choose language [OK]
Hint: Language switch changes content language, not appearance [OK]
Common Mistakes:
Confusing language switch with theme or profile settings
Thinking it logs out users automatically
2. Which of the following is the correct way to declare a React state hook for language selection in Next.js?
easy
A. const [language, setLanguage] = useState('en')
B. const language = useState('en')
C. useState = const [language, setLanguage]('en')
D. const [language, setLanguage] = useState()
Solution
Step 1: Recall React useState syntax
The correct syntax is: const [state, setState] = useState(initialValue).
Step 2: Check each option
const [language, setLanguage] = useState('en') matches correct syntax with initial value 'en'. Others have syntax errors or missing initial value.
Final Answer:
const [language, setLanguage] = useState('en') -> Option A
Hint: useState returns array destructured into state and setter [OK]
Common Mistakes:
Not destructuring the array returned by useState
Missing initial state value
Incorrect assignment order
3. Given this Next.js component snippet: <pre>const LanguageSwitcher = () => {
const [lang, setLang] = useState('en');
return (
<button onClick={() => setLang('fr')} aria-label="Switch to French">FR</button>
);
};
What will be the value of lang after clicking the button once?
medium
A. null
B. 'en'
C. undefined
D. 'fr'
Solution
Step 1: Understand initial state
The state variable lang starts as 'en'.
Step 2: Analyze button click effect
Clicking the button calls setLang('fr'), updating lang to 'fr'.
Final Answer:
'fr' -> Option D
Quick Check:
Click sets lang to 'fr' [OK]
Hint: Click triggers setLang with new language [OK]
Common Mistakes:
Thinking state stays the same after click
Confusing initial value with updated value
4. Consider this Next.js language switcher code: <pre>const LanguageSwitcher = () => {
const [lang, setLang] = useState('en');
return (
<button onClick={() => setLang('es')}>Switch to Spanish</button>
);
};
Why might this code cause an accessibility issue?
medium
A. The state variable is not initialized
B. The button lacks an aria-label describing its purpose
C. The onClick handler syntax is incorrect
D. The component does not import React
Solution
Step 1: Check accessibility features
The button has no aria-label or descriptive text for screen readers.
Step 2: Evaluate other options
State is initialized, onClick syntax is correct, React import is assumed; only missing aria-label is an accessibility issue.
Final Answer:
The button lacks an aria-label describing its purpose -> Option B
Quick Check:
Missing aria-label = accessibility problem [OK]
Hint: Always add aria-label for buttons with unclear text [OK]
Common Mistakes:
Ignoring accessibility attributes
Assuming syntax errors without checking
Overlooking React import necessity
5. You want to build a language switcher in Next.js that updates the URL locale and changes the displayed language without a full page reload. Which approach is best?
hard
A. Reload the page manually after setting a cookie for language
B. Use window.location.href to change URL and reload page
C. Use Next.js <Link> with locale prop and React state to track language
D. Store language in localStorage and ignore URL changes
Solution
Step 1: Understand Next.js locale routing
Next.js supports locale routing with to change language without full reload.
Step 2: Combine URL update and React state
Using <Link> with locale prop updates URL and React state tracks current language for UI updates.
Step 3: Evaluate other options
Reloading page or using window.location causes full reload, losing SPA benefits. Ignoring URL breaks routing consistency.
Final Answer:
Use Next.js <Link> with locale prop and React state to track language -> Option C
Quick Check:
Next.js locale routing + state = smooth language switch [OK]
Hint: Use Next.js for smooth language changes [OK]
Common Mistakes:
Reloading page loses SPA benefits
Ignoring URL locale causes routing issues
Using localStorage alone misses URL sync
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.