Step 1: Understand how ref works in template interpolation
In Vue, a ref is an object with a value property. To display the inner value, you must use message.value in script or just message in template because Vue unwraps refs in templates.
Step 2: Check the template interpolation
The template uses {{ message }}. Vue unwraps refs here, so it should display the string inside message.value, which is 'Hi'.
Step 3: Identify the actual behavior
In Vue 3 with <script setup>, refs are unwrapped automatically in templates, so it should display 'Hi'. The code sets message.value = 'Hi' correctly, so the output is 'Hi'.
Final Answer:
<p>Hi</p> -> Option C
Quick Check:
Template unwraps ref = Hi [OK]
Hint: Remember Vue unwraps refs automatically in templates [OK]
Common Mistakes:
Thinking you must write message.value in template
Confusing ref object with its value
Assuming message is undefined
4. Identify the error in the following <script setup> code snippet:
<script setup>
import { reactive } from 'vue'
const state = reactive({ count: 0 })
function increment() {
state.count++
}
</script>
<template>
<button @click="increment()">Increment</button>
<p>Count: {{ state.count }}</p>
</template>
medium
A. There is no error; the code works correctly.
B. The increment function is not exposed to the template and cannot be called.
C. The reactive object should be declared with ref() instead of reactive().
D. The @click event syntax is incorrect; it should be v-on:click.
Solution
Step 1: Analyze the reactive state and function
The code uses reactive to create a reactive object state with a count property. The increment function modifies state.count.
Step 2: Check template usage and event binding
The template uses @click="increment()" which is valid shorthand for v-on:click. The function increment is defined in <script setup> and is automatically exposed to the template.
Final Answer:
There is no error; the code works correctly. -> Option A
Quick Check:
Script setup exposes functions automatically = C [OK]
Hint: Functions in script setup are auto-exposed to template [OK]
Common Mistakes:
Thinking reactive must be replaced by ref for objects
Believing functions need explicit export
Confusing @click with invalid syntax
5. You want to create a Vue component using <script setup> that fetches data asynchronously when the component mounts and stores it in a reactive variable. Which is the correct way to do this?
hard
A.
<script setup>
import { ref, onMounted } from 'vue'
const data = ref(null)
onMounted(async () => {
const res = await fetch('https://api.example.com/data')
data.value = await res.json()
})
</script>
B.
<script setup>
import { reactive } from 'vue'
const data = reactive(null)
async function fetchData() {
const res = await fetch('https://api.example.com/data')
data = await res.json()
}
fetchData()
</script>
C.
<script setup>
import { ref } from 'vue'
const data = ref(null)
fetch('https://api.example.com/data').then(res => {
data = res.json()
})
</script>