A Mental Model for Angular Signals
Signals are not just a new API — they change how change detection works. Here is the model that makes signal, computed, and effect click.
Tag
36 articles
Signals are not just a new API — they change how change detection works. Here is the model that makes signal, computed, and effect click.
How :has(), :is(), and :where() let CSS express parent-based and grouped selectors that used to require JavaScript or repetitive rules.
Renders are not DOM updates. Understand what actually triggers a render, what reconciliation does, and when memoization earns its keep.
How React portals render outside the DOM tree while events still bubble through React's component hierarchy, and what that means for event handling.
How to build positioned, dismissible overlays such as menus and popovers using the Angular CDK's OverlayModule instead of ad-hoc absolute positioning.
A practical look at how resource() and httpResource replace ad-hoc RxJS pipelines for loading, error, and reload state around async data in Angular.
How to place error boundaries strategically in a React tree so a single failing widget degrades gracefully instead of blanking the entire page.
How React 19's actions and the use() hook simplify pending state, error handling, and reading promises or context inside components.
OnPush doesn't make a component faster on its own — it changes when Angular bothers to check it at all. Understanding the difference matters.
Concurrent rendering lets React interrupt its own work for something more urgent. Transitions are how you tell React which updates can wait.
Most brittle Angular tests fail because they test implementation, not behavior. A look at TestBed patterns that stay green through real refactors.
Testing Library's core rule — the more your tests resemble how software is used, the more confidence they give you — changes what a good React test looks like.
Web Components promise framework-agnostic UI, but the interop details — props vs attributes, events, and Shadow DOM styling — are where real integration breaks.
Angular's reactive forms went from returning any everywhere to fully inferred types. Here's what that buys you and where it still leaks.
Controlled inputs became the reflexive default in React, but uncontrolled forms are often simpler, faster, and closer to how the platform already works.
Smooth page and state transitions used to require a JavaScript animation library and careful DOM choreography. The View Transitions API does it natively.
Class-based guards are gone from the recommended path. Here's how functional guards and resolvers actually change route protection and data loading.
The state management debate settled into a layered answer: different tools for local, cross-cutting, and server state, not one library for everything.
A practical workflow for finding and fixing JavaScript memory leaks in browser apps using heap snapshots, detached DOM detection, and retainer analysis.
Media queries respond to the viewport. Container queries respond to the component's own box — which is what most responsive design actually needed.
The inject() function didn't just shorten constructors — it decoupled dependency lookup from class instantiation entirely, and that changes what's possible.
Intl.NumberFormat, RelativeTimeFormat, ListFormat, and Segmenter replace most hand-rolled formatting and i18n code — here's how to actually use them.
Suspense is a coordination mechanism for async UI, not a spinner component. Understanding what it actually catches changes how you structure data fetching.
Alt attributes are the easy 10% of accessibility work. Focus management, semantic structure, and keyboard flow are where most sites actually fail.