English for Angular Signals Developers
Learn the English vocabulary for Angular's signals API: reactive primitives, computed values, effects, and change detection.
Angular’s signals API introduced a new reactive vocabulary — signal, computed, effect — that overlaps in spirit with terms from other frameworks but has its own precise meaning within Angular’s change detection model, so using them loosely in a code review muddies what’s actually being proposed.
Key Vocabulary
Signal — a reactive, readable wrapper around a value that notifies consumers when it changes, created with signal() and read by calling it as a function.
“Convert this component’s local state to a signal so the template updates automatically without a manual change detection trigger.”
Computed signal — a read-only signal whose value is derived from other signals and recalculated automatically whenever its dependencies change. “Instead of recalculating the total in the template, define it as a computed signal so it updates only when the cart signal actually changes.”
Effect — a function that runs automatically in response to signal changes, typically used for side effects like logging or syncing with external systems rather than for deriving values. “Don’t use an effect to update another signal — that’s what computed is for. Reserve effects for things like writing to local storage.”
Zoneless change detection — an Angular mode that relies on signals to know exactly when to re-render, removing the need for Zone.js to patch async APIs and detect changes globally. “Once the whole component tree is signal-based, we can opt into zoneless change detection and drop the Zone.js polyfill entirely.”
Signal input — a component input declared with input() that behaves as a signal, letting the component react to changes in parent-provided values without lifecycle hooks like ngOnChanges.
“Migrate this @Input() to a signal input — it removes the need for ngOnChanges just to react to the value changing.”
Common Phrases
- “Is this value a plain signal, or should it actually be computed from something else?”
- “Are we using an effect here to derive state, or is it strictly a side effect like logging?”
- “Does this component still depend on Zone.js, or can it run under zoneless change detection?”
- “Should this be a signal input, or does the parent never actually update this value after init?”
- “Is the computed signal re-running more often than expected — are its dependencies too broad?”
Example Sentences
Reviewing a pull request: “This effect is writing to another signal, which usually means it should be a computed signal instead — effects are for side effects, not derived state.”
Explaining a migration:
“We migrated the cart component’s @Input() properties to signal inputs, which let us drop the ngOnChanges hook entirely since the signals themselves notify the template.”
Debugging unexpected re-renders: “The computed signal is recalculating on every keystroke because it depends on the whole form group signal instead of just the one field it actually needs.”
Professional Tips
- Say signal and computed signal as distinct terms — conflating them in a discussion makes it unclear whether a value is source-of-truth state or a derived value.
- Reserve effect for side effects, and call it out explicitly in review if someone is using it to update state — that’s a common Angular signals anti-pattern worth naming precisely.
- Mention zoneless specifically when discussing performance or bundle size wins — it’s a distinct migration milestone, not just “using signals.”
- Use signal input rather than “reactive input” — it’s the framework’s actual API name and avoids ambiguity with other reactivity systems.
Practice Exercise
- Explain the difference between a signal and a computed signal in one sentence.
- Describe what an effect should and shouldn’t be used for.
- Write a sentence explaining what zoneless change detection removes the need for.