This app lets you click buttons to switch between three views: Home, Profile, and Settings. The displayed content changes without reloading the page.
Vue
<template>
<section>
<h2>Choose a view:</h2>
<button @click="currentView = 'Home'">Home</button>
<button @click="currentView = 'Profile'">Profile</button>
<button @click="currentView = 'Settings'">Settings</button>
<component :is="components[currentView]" />
</section>
</template>
<script setup>
import { ref } from'vue'const currentView = ref('Home')
const Home = {
template: '<p>Welcome to the Home page!</p>'
}
const Profile = {
template: '<p>This is your Profile.</p>'
}
const Settings = {
template: '<p>Adjust your Settings here.</p>'
}
const components = {
Home,
Profile,
Settings
}
</script>
OutputSuccess
Important Notes
Use :is with component names or objects to render dynamically.
Remember to provide unique keys when rendering lists with v-for for better performance.
Use v-if and v-else-if for simple conditional rendering of elements.
Summary
Dynamic render patterns let your app show different things based on data or user actions.
Use :is to switch components dynamically and v-if for conditional content.
This makes your app interactive and responsive to user needs.
Practice
(1/5)
1. What does the :is directive do in Vue's dynamic render patterns?
easy
A. It dynamically switches which component or element to render.
B. It binds a CSS class to an element.
C. It listens for user input events.
D. It creates a loop to render multiple items.
Solution
Step 1: Understand the purpose of :is
The :is directive in Vue allows you to dynamically choose which component or HTML element to render based on a variable.
Step 2: Compare with other directives
Unlike class binding or event listening, :is changes the actual rendered tag or component, making the UI flexible.
Final Answer:
It dynamically switches which component or element to render. -> Option A
Quick Check:
:is = dynamic component switch [OK]
Hint: Remember :is changes the tag or component shown [OK]
Common Mistakes:
Confusing :is with event handlers
Thinking :is binds CSS classes
Assuming :is creates loops
2. Which of the following is the correct syntax to conditionally render a component in Vue using v-if?
easy
A. <MyComponent :is='show' />
B. <MyComponent v-if='show' />
C. <MyComponent v-for='show' />
D. <MyComponent v-show='show' />
Solution
Step 1: Identify the directive for conditional rendering
v-if is used to conditionally render elements or components based on a boolean expression.
Step 2: Check the syntax correctness
The syntax <MyComponent v-if='show' /> correctly applies v-if to render MyComponent only if show is true.
Final Answer:
<MyComponent v-if='show' /> -> Option B
Quick Check:
v-if = conditional render [OK]
Hint: Use v-if to show/hide components conditionally [OK]
Common Mistakes:
Confusing v-if with v-show
Using v-for for conditional rendering
Misusing :is for boolean conditions
3. Given the Vue template:
<component :is="currentView" />
and the data:
data() { return { currentView: 'HomeView' } }
What will be rendered if HomeView is a registered component?
medium
A. An error will occur because component tag is invalid.
B. Nothing will render because currentView is a string.
C. The literal text 'HomeView' will be shown.
D. The HomeView component will be rendered.
Solution
Step 1: Understand <component :is=... /> usage
The <component> tag with :is dynamically renders the component named by the string in currentView.
Step 2: Check if HomeView is registered
Since HomeView is registered, Vue will render that component in place of <component>.
Final Answer:
The HomeView component will be rendered. -> Option D
Quick Check:
Dynamic component name string renders component [OK]
Hint: Dynamic :is renders component named by string [OK]
Common Mistakes:
Thinking string names don't render components
Confusing component tag as invalid HTML
Expecting literal text instead of component
4. What is wrong with this Vue template snippet?
<component :is="viewName" v-if="viewName" />
where viewName can be null or a component name string.
medium
A. It will throw an error if viewName is null.
B. The :is binding must be a component object, not a string.
C. There is no problem; it works correctly.
D. The v-if should be replaced with v-show.
Solution
Step 1: Analyze v-if="viewName" behavior
The v-if prevents rendering when viewName is null or falsy, so the component won't render or cause errors.
Step 2: Check :is binding type
:is accepts a string naming a registered component or a component object, so a string is valid.
Final Answer:
There is no problem; it works correctly. -> Option C
Quick Check:
v-if blocks null, :is accepts string [OK]
Hint: v-if prevents null rendering errors [OK]
Common Mistakes:
Assuming null causes errors without v-if
Confusing v-show with v-if
Thinking :is only accepts objects
5. You want to render a list of components dynamically based on an array of component names, but only if the component name is not empty. Which Vue pattern correctly achieves this?
hard
A.
<template>
<component
v-for="name in componentNames"
:key="name"
:is="name"
v-if="name"
/>
</template>
B.
<template>
<component
v-for="name in componentNames"
:key="name"
:is="name"
/>
</template>