@jscutlery/microwave brings simplified and performant reactivity to Angular.
⚡️ Less change detection: Microwave will only trigger change detection when properties change.
😌 Less RxJS Spaghetti: Focus on your features without sacrificing performance.
🚦 Coalescing: regroup changes and trigger change detection once per component.
✅ Microwave is ZoneJS agnostic so it will work with or without it.
👯♀️ Don't trigger useless change detections when a property's value has been set to the same value.
https://stackblitz.com/edit/game-of-life-microwave?file=src%2Fapp%2Fcell.component.ts
Just add the @Microwave decorator and let it nuke your component!
import { Microwave } from '@jscutlery/microwave';
@Microwave()
@Component({
template: `...`,
})
class GreetingsComponent {
/* ⚠️ Important: properties should be initialized, otherwise they won't be detected by Microwave. */
name?: string = undefined;
}Watch property changes.
@Microwave()
@Component({
template: `<h1>Welcome {{ upperCaseName }}</h1>`,
})
class GreetingsComponent {
@Input() name?: string = undefined;
upperCaseName?: string = undefined;
constructor() {
/* Note that you don't have to handle the subscription as the returned observable
* will be unsubscribed from when the component is destroyed.
* Though, if you add operators, you will have to handle subscriptions. */
watch(this, 'name').subscribe((name) => {
this.upperCaseName = name.toUpperCase();
});
}
}You can customize the change detection strategy using the strategy parameter.
@Microwave({
strategy: asyncStrategy,
})
export class MyComponent {}Here are the current strategies.
You can implement your own strategy using the Strategy<T> signature.
| Strategy | Description |
|---|---|
| asapStrategy | This is the default strategy. It will trigger change detection independently for each component while coalescing changes and scheduling the change detection on the microtask queue. |
| asyncStrategy | Local strategy coalescing using macrotasks |
| rafStrategy | Local strategy coalescing using requestAnimationFrame |
| syncStrategy | Local strategy without coalescing so it will trigger change detection each time a property changes. |
- provide multiple Microwave strategies
-
watchmultiple properties - automatically unsubscribe even when using operators with
watch(...).pipe(...)
The RxAngular team for the inspiration. In fact, the first prototype was built during the creation of the RxState Marmicode Tasting video: https://youtu.be/CcQYj4V2IKw
Wordplay by @AlyssaNicoll & @schwarty.
Cf. Angular Air https://youtu.be/CmspcYY6jjU