Bird
Raised Fist0
Vueframework~10 mins

toRef and toRefs for destructuring in Vue - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a reactive reference to the 'count' property in the state object.

Vue
import { reactive, [1] } from 'vue';
const state = reactive({ count: 0 });
const countRef = [1](state, 'count');
Drag options to blanks, or click blank then click option'
AtoRefs
BtoRef
Cref
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using toRefs instead of toRef when only one property is needed.
Using ref directly on a reactive object property.
2fill in blank
medium

Complete the code to destructure all properties from the reactive state object using the correct Vue function.

Vue
import { reactive, [1] } from 'vue';
const state = reactive({ name: 'Alice', age: 30 });
const { name, age } = [1](state);
Drag options to blanks, or click blank then click option'
AtoRefs
BtoRef
Cref
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using toRef instead of toRefs for multiple properties.
Destructuring reactive object directly without toRefs, losing reactivity.
3fill in blank
hard

Fix the error in the code by choosing the correct function to keep reactivity when destructuring.

Vue
import { reactive, [1] } from 'vue';
const state = reactive({ score: 100 });
const { score } = state; // This breaks reactivity
const reactiveScore = [1](state).score;
Drag options to blanks, or click blank then click option'
AtoRefs
BtoRef
Cref
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Destructuring reactive object directly without toRefs.
Using toRef which only works for single properties.
4fill in blank
hard

Fill both blanks to create a reactive reference to 'title' and destructure 'author' and 'year' from the reactive book object.

Vue
import { reactive, [1], [2] } from 'vue';
const book = reactive({ title: 'Vue Guide', author: 'Evan', year: 2024 });
const titleRef = [1](book, 'title');
const { author, year } = [2](book);
Drag options to blanks, or click blank then click option'
AtoRef
BtoRefs
Cref
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up toRef and toRefs usage.
Using ref or reactive incorrectly here.
5fill in blank
hard

Fill all three blanks to create reactive references for 'firstName', destructure 'lastName', and create a reactive reference for 'age' from the user object.

Vue
import { reactive, [1], [2], [3] } from 'vue';
const user = reactive({ firstName: 'John', lastName: 'Doe', age: 25 });
const firstNameRef = [1](user, 'firstName');
const { lastName } = [2](user);
const ageRef = [3](user, 'age');
Drag options to blanks, or click blank then click option'
AtoRef
BtoRefs
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using reactive instead of toRef or toRefs.
Using toRefs for single properties.

Practice

(1/5)
1. What is the main purpose of toRef in Vue's Composition API?
easy
A. To convert a ref into a reactive object
B. To create reactive references for all properties of a reactive object
C. To create a reactive reference to a single property of a reactive object
D. To make a reactive object readonly

Solution

  1. Step 1: Understand what toRef does

    toRef creates a reactive reference to a single property inside a reactive object, keeping reactivity when destructuring.
  2. Step 2: Compare with other options

    toRefs creates refs for all properties, not just one. The other options describe different functions.
  3. Final Answer:

    To create a reactive reference to a single property of a reactive object -> Option C
  4. Quick Check:

    toRef = single property ref [OK]
Hint: toRef = one property ref, toRefs = all properties refs [OK]
Common Mistakes:
  • Confusing toRef with toRefs
  • Thinking toRef creates refs for all properties
  • Assuming toRef converts refs to reactive objects
2. Which of the following is the correct syntax to destructure a reactive object state using toRefs?
easy
A. const { count, name } = toRef(state)
B. const { count, name } = toRefs(state)
C. const [count, name] = toRefs(state)
D. const count = toRefs(state).count

Solution

  1. Step 1: Recall the syntax of toRefs

    toRefs returns an object with refs for each property, so destructuring with curly braces is correct.
  2. Step 2: Analyze each option

    const { count, name } = toRef(state) uses toRef which returns a single ref, so destructuring multiple properties is invalid. const [count, name] = toRefs(state) uses array destructuring which is wrong. const count = toRefs(state).count accesses a property but does not destructure.
  3. Final Answer:

    const { count, name } = toRefs(state) -> Option B
  4. Quick Check:

    toRefs returns object of refs, use object destructuring [OK]
Hint: Use curly braces {} with toRefs for object destructuring [OK]
Common Mistakes:
  • Using toRef instead of toRefs for multiple properties
  • Using array destructuring with toRefs
  • Not destructuring and accessing properties directly
3. Given the code:
const state = reactive({ count: 0, name: 'Vue' })
const { count } = toRefs(state)
count.value++
console.log(state.count)

What will be logged to the console?
medium
A. 0
B. An error is thrown
C. undefined
D. 1

Solution

  1. Step 1: Understand reactivity with toRefs

    Destructuring with toRefs keeps the properties reactive. So count is a ref linked to state.count.
  2. Step 2: Incrementing count.value updates state.count

    Increasing count.value by 1 changes state.count to 1, so logging state.count outputs 1.
  3. Final Answer:

    1 -> Option D
  4. Quick Check:

    toRefs keeps reactivity, so state.count = 1 [OK]
Hint: toRefs keeps reactivity; changing ref updates original object [OK]
Common Mistakes:
  • Thinking destructured refs are copies, not reactive
  • Forgetting to use .value to update ref
  • Expecting original state to stay unchanged
4. What is wrong with this code snippet?
const state = reactive({ count: 0 })
const { count } = state
count.value++
medium
A. You cannot destructure reactive objects directly without toRefs or toRef
B. count.value++ is invalid syntax
C. reactive objects cannot have numeric properties
D. count is not reactive because reactive() was not called

Solution

  1. Step 1: Identify destructuring issue

    Destructuring state directly extracts the raw value, losing reactivity. count is not a ref here.
  2. Step 2: Understand why count.value++ fails

    Since count is a plain value, it has no .value property, so this causes an error.
  3. Final Answer:

    You cannot destructure reactive objects directly without toRefs or toRef -> Option A
  4. Quick Check:

    Destructure reactive with toRefs/toRef to keep reactivity [OK]
Hint: Always use toRefs or toRef when destructuring reactive objects [OK]
Common Mistakes:
  • Destructuring reactive objects directly
  • Using .value on non-ref values
  • Assuming reactive() makes properties refs automatically
5. You have a reactive object user with properties firstName and lastName. You want to destructure these properties but keep them reactive and also create a computed property fullName that updates when either changes. Which approach correctly achieves this?
hard
A. const { firstName, lastName } = toRefs(user); const fullName = computed(() => `${firstName.value} ${lastName.value}`)
B. const { firstName, lastName } = user; const fullName = computed(() => `${firstName} ${lastName}`)
C. const firstName = toRef(user, 'firstName'); const lastName = toRef(user, 'lastName'); const fullName = `${firstName.value} ${lastName.value}`
D. const firstName = user.firstName; const lastName = user.lastName; const fullName = computed(() => `${firstName.value} ${lastName.value}`)

Solution

  1. Step 1: Destructure with reactivity

    Using toRefs keeps firstName and lastName reactive refs when destructured.
  2. Step 2: Create computed property using .value

    The computed property accesses firstName.value and lastName.value to reactively update fullName.
  3. Final Answer:

    const { firstName, lastName } = toRefs(user); const fullName = computed(() => `${firstName.value} ${lastName.value}`) -> Option A
  4. Quick Check:

    toRefs + computed with .value keeps reactivity [OK]
Hint: Use toRefs for destructuring and computed with .value [OK]
Common Mistakes:
  • Destructuring without toRefs loses reactivity
  • Using .value on non-ref values
  • Not using computed for reactive derived values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard