0
0
Vueframework~20 mins

Readonly for immutable reactive data in Vue - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Readonly Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What happens when you try to modify a readonly reactive object?
Consider the following Vue 3 code using readonly. What will be the console output after clicking the button?
Vue
import { ref, readonly } from 'vue';

const state = ref({ count: 0 });
const readonlyState = readonly(state.value);

function increment() {
  try {
    readonlyState.count++;
  } catch (e) {
    console.log('Error:', e.message);
  }
}

// Simulate button click
increment();
console.log(readonlyState.count);
A1
BError: readonlyState is not reactive
CError: Cannot assign to read only property 'count' of object '#<Object>'\n0
D0
Attempts:
2 left
💡 Hint
Readonly objects prevent direct modification and throw errors in strict mode.
state_output
intermediate
2:00remaining
What is the value of the reactive state after wrapping with readonly?
Given this Vue 3 code, what will be the output of the last console.log statement?
Vue
import { reactive, readonly } from 'vue';

const state = reactive({ name: 'Alice' });
const readOnlyState = readonly(state);

state.name = 'Bob';
console.log(readOnlyState.name);
A'Bob'
B'Alice'
Cundefined
DError: Cannot assign to readonly property
Attempts:
2 left
💡 Hint
Readonly wraps the reactive object but reflects changes made to the original reactive source.
📝 Syntax
advanced
2:00remaining
Which code snippet correctly creates a deeply readonly reactive object?
Select the option that creates a deeply readonly reactive object in Vue 3.
Aconst state = reactive(readonly({ user: { name: 'Eve' } }));
Bconst state = reactive({ user: readonly({ name: 'Eve' }) });
Cconst state = readonly({ user: reactive({ name: 'Eve' }) });
Dconst state = readonly(reactive({ user: { name: 'Eve' } }));
Attempts:
2 left
💡 Hint
Readonly should wrap the reactive object to make it deeply readonly.
🔧 Debug
advanced
2:00remaining
Why does this Vue 3 code not prevent mutation of nested properties?
Examine the code below. Why can state.user.name still be changed despite using readonly?
Vue
import { readonly } from 'vue';

const state = {
  user: {
    name: 'John'
  }
};

const readOnlyState = readonly(state);

readOnlyState.user.name = 'Jane';
console.log(readOnlyState.user.name);
ABecause readonly does not work on plain objects, only reactive ones.
BBecause readonly only makes the top-level object readonly, nested objects remain mutable.
CBecause the code is missing a reactive wrapper around state.
DBecause readonly only works with refs, not objects.
Attempts:
2 left
💡 Hint
Readonly is shallow by default unless wrapping a reactive object.
🧠 Conceptual
expert
3:00remaining
How does Vue 3's readonly differ from Object.freeze for immutability?
Which statement best describes the difference between Vue 3's readonly and JavaScript's Object.freeze when used for immutable data?
A<code>readonly</code> creates a reactive proxy that tracks dependencies and prevents mutations, while <code>Object.freeze</code> only prevents mutations without reactivity.
B<code>readonly</code> freezes the object deeply, while <code>Object.freeze</code> only freezes shallowly.
C<code>readonly</code> works only on refs, <code>Object.freeze</code> works on any object.
D<code>readonly</code> allows mutations but warns in console, <code>Object.freeze</code> throws errors on mutation.
Attempts:
2 left
💡 Hint
Think about reactivity and mutation prevention differences.