Bird
Raised Fist0
Angularframework~10 mins

Signals as modern state primitive in Angular - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a signal with initial value 0.

Angular
const count = [1](0);
Drag options to blanks, or click blank then click option'
Asignal
BuseState
Cref
Dreactive
Attempts:
3 left
💡 Hint
Common Mistakes
Using React's useState instead of Angular's signal
Trying to use ref which is from Vue
Using reactive which is for Angular forms, not signals
2fill in blank
medium

Complete the code to read the current value of the signal.

Angular
const currentValue = count[1];
Drag options to blanks, or click blank then click option'
A()
B.get()
C.value
D[]
Attempts:
3 left
💡 Hint
Common Mistakes
Using .value property which signals do not have
Using .get() which is not part of Angular signals
Using array brackets which is invalid
3fill in blank
hard

Fix the error in updating the signal value.

Angular
count[1](count() + 1);
Drag options to blanks, or click blank then click option'
A[]
B()
C.set
D.value
Attempts:
3 left
💡 Hint
Common Mistakes
Trying to assign directly like count() = ...
Using .value = which is invalid
Using array brackets which is invalid
4fill in blank
hard

Fill both blanks to create a computed signal that doubles the count.

Angular
const doubleCount = computed(() => count[1] * [2]);
Drag options to blanks, or click blank then click option'
A.value
B2
Ccount
D()
Attempts:
3 left
💡 Hint
Common Mistakes
Using the signal name without calling it inside computed
Using .value instead of ()
Multiplying by count itself instead of a number
5fill in blank
hard

Fill all three blanks to create a signal, update it, and create a computed signal that adds 10.

Angular
const score = [1](5);
score[2](score() + 3);
const bonusScore = computed(() => score() [3] 10);
Drag options to blanks, or click blank then click option'
Asignal
B.set
C+
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using .value = instead of .set() to update
Using - instead of + in computed
Not creating the signal with signal()

Practice

(1/5)
1. What is the main purpose of using signal() in Angular?
easy
A. To style elements dynamically
B. To create a reactive state value that updates the UI automatically
C. To handle HTTP requests
D. To define a new component

Solution

  1. Step 1: Understand the role of signal()

    signal() creates a reactive value that Angular tracks for changes.
  2. Step 2: Connect signal() to UI updates

    When the signal value changes, Angular automatically updates the UI where it is used.
  3. Final Answer:

    To create a reactive state value that updates the UI automatically -> Option B
  4. Quick Check:

    signal() creates reactive state [OK]
Hint: Signals hold reactive values that auto-update UI [OK]
Common Mistakes:
  • Confusing signals with components
  • Thinking signals handle HTTP
  • Assuming signals are for styling
2. Which of the following is the correct way to create a signal with initial value 10 in Angular?
easy
A. const count = signal(10);
B. const count = new Signal(10);
C. const count = createSignal(10);
D. const count = signal.set(10);

Solution

  1. Step 1: Recall the syntax for creating signals

    Angular uses signal(initialValue) to create a signal with a starting value.
  2. Step 2: Check each option's syntax

    Only const count = signal(10); matches the correct syntax. Others use incorrect constructors or methods.
  3. Final Answer:

    const count = signal(10); -> Option A
  4. Quick Check:

    signal() creates with initial value [OK]
Hint: Use signal(value) to create signals [OK]
Common Mistakes:
  • Using new keyword with signal
  • Calling non-existent createSignal function
  • Trying to set value during creation
3. Given the code:
const count = signal(0);
count.set(5);
console.log(count());

What will be printed in the console?
medium
A. 5
B. 0
C. undefined
D. Error: count is not a function

Solution

  1. Step 1: Understand signal creation and update

    The signal count starts at 0, then set(5) changes its value to 5.
  2. Step 2: Reading the signal value

    Calling count() returns the current value, which is 5 after the update.
  3. Final Answer:

    5 -> Option A
  4. Quick Check:

    count.set(5) updates value, count() reads it [OK]
Hint: Use count() to read updated signal value [OK]
Common Mistakes:
  • Thinking count() returns initial value
  • Confusing set() with reading value
  • Assuming count is not callable
4. Identify the error in this Angular signal code:
const name = signal('Alice');
name.update(name + ' Smith');
medium
A. Incorrect initial value type for signal
B. Missing parentheses when calling signal()
C. Using update() with a string instead of a function
D. Using set() instead of update()

Solution

  1. Step 1: Understand update() usage

    update() expects a function that receives the current value and returns the new value.
  2. Step 2: Analyze the code's argument to update()

    The code passes name + ' Smith' which is a string, not a function, causing an error.
  3. Final Answer:

    Using update() with a string instead of a function -> Option C
  4. Quick Check:

    update() needs a function argument [OK]
Hint: Pass a function to update(), not a direct value [OK]
Common Mistakes:
  • Passing value directly to update()
  • Confusing set() and update() usage
  • Ignoring function argument requirement
5. You want to create a signal that holds a list of numbers and add a new number to it reactively. Which code correctly updates the signal to add number 7?
hard
A. numbers.push(7);
B. numbers.set(numbers() + 7);
C. numbers = signal([...numbers(), 7]);
D. numbers.update(list => [...list, 7]);

Solution

  1. Step 1: Understand how to update array signals

    Signals hold values immutably; to add an item, create a new array with the old items plus the new one.
  2. Step 2: Check each option's correctness

    numbers.update(list => [...list, 7]); uses update() with a function that returns a new array including 7, which is correct.
    numbers.set(numbers() + 7); tries to add 7 to an array directly, causing a type error.
    numbers = signal([...numbers(), 7]); tries to reassign the signal variable, which is incorrect.
    numbers.push(7); calls push() on the signal itself, which is not valid.
  3. Final Answer:

    numbers.update(list => [...list, 7]); -> Option D
  4. Quick Check:

    Use update() with function returning new array [OK]
Hint: Use update(fn) to immutably add items to array signals [OK]
Common Mistakes:
  • Trying to mutate signal value directly
  • Reassigning signal variable instead of updating
  • Using set() with wrong value type