Performance: v-else and v-else-if
Controls conditional rendering in Vue, affecting how many DOM nodes are created and updated during rendering.
<template> <div v-if="status === 'loading'">Loading...</div> <div v-else-if="status === 'error'">Error!</div> <div v-else>Success!</div> </template>
<template> <div v-if="status === 'loading'">Loading...</div> <div v-if="status === 'error'">Error!</div> <div v-if="status === 'success'">Success!</div> </template>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Multiple separate v-if | Multiple nodes created and destroyed | Multiple reflows per condition | Multiple paints | [X] Bad |
| v-if with v-else-if and v-else | Single node created/destroyed per render | Single reflow per update | Single paint | [OK] Good |
v-else directive do in Vue?v-if and v-else-if behaviorv-if runs if its condition is true; v-else-if runs if the previous v-if or v-else-if was false and its own condition is true.v-else behaviorv-else runs only if all previous v-if and v-else-if conditions are false, acting as a fallback.v-if and v-else-if conditions are false -> Option Bv-else = fallback [OK]v-else-if in Vue?v-directive="expression" to bind conditions or values.<div v-else-if="condition">Content</div> uses v-else-if="condition", which is correct. Options B, C, and D use invalid syntax forms.<div v-if="score >= 90">A</div> <div v-else-if="score >= 75">B</div> <div v-else-if="score >= 60">C</div> <div v-else>F</div>
score is 80?score >= 90score >= 75<div v-if="isActive">Active</div> <div v-else-if>Inactive</div> <div v-else>Unknown</div>
v-else-if usagev-else-if requires a condition to evaluate. Here, it is used without any condition, which is invalid syntax.v-else can follow v-else-if, and v-if has proper closing tags, so no issues there.v-else-if directive is missing a condition -> Option Av-if, v-else-if, and v-else to show 'Admin Access', 'Editor Access', or 'Guest Access' respectively?<div v-if="status === 'admin'">Admin Access</div> <div v-else-if="status === 'editor'">Editor Access</div> <div v-else>Guest Access</div>correctly uses
v-if, then v-else-if with a condition, then v-else as fallback.<div v-if="status === 'admin'">Admin Access</div> <div v-if="status === 'editor'">Editor Access</div> <div v-else>Guest Access</div>uses two
v-if directives, which are independent and can cause multiple blocks to render. <div v-if="status === 'admin'">Admin Access</div> <div v-else-if>Editor Access</div> <div v-else>Guest Access</div>uses
v-else-if without a condition, which is invalid. <div v-if="status === 'admin'">Admin Access</div> <div v-else>Editor Access</div> <div v-else-if="status === 'editor'">Guest Access</div>places
v-else before v-else-if, which breaks the chain.Pass the test and this pattern moves unknown