{"id":26619,"date":"2024-09-09T03:06:55","date_gmt":"2024-09-09T01:06:55","guid":{"rendered":"https:\/\/www.angulararchitects.io\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/"},"modified":"2025-06-04T17:03:13","modified_gmt":"2025-06-04T15:03:13","slug":"when-not-to-use-effects-in-angular-and-what-to-do-instead","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/","title":{"rendered":"When (Not) to use Effects in Angular &#8212; and what to do instead"},"content":{"rendered":"<div class=\"wp-post-series-box series-signals wp-post-series-box--expandable\">\n\t\t\t<input id=\"collapsible-series-signals69f2b57169813\" class=\"wp-post-series-box__toggle_checkbox\" type=\"checkbox\">\n\t\n\t<label\n\t\tclass=\"wp-post-series-box__label\"\n\t\t\t\t\tfor=\"collapsible-series-signals69f2b57169813\"\n\t\t\ttabindex=\"0\"\n\t\t\t\t>\n\t\t<p class=\"wp-post-series-box__name wp-post-series-name\">\n\t\t\tThis is post 5 of 9 in the series <em>&ldquo;Signals&rdquo;<\/em>\t\t<\/p>\n\t\t\t<\/label>\n\n\t\t\t<div class=\"wp-post-series-box__posts\">\n\t\t\t<ol>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/angular-signals\/\">Signals in Angular: Building Blocks<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/component-communication-with-signals-inputs-two-way-bindings-and-content-view-queries\/\">Component Communication with Signals: Inputs, Two-Way Bindings, and Content\/ View Queries<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/successful-with-signals-in-angular-3-effective-rules-for-your-architecture\/\">Successful with Signals in Angular &#8211; 3 Effective Rules for Your Architecture<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/skillfully-using-signals-in-angular-selected-hints-for-professional-use\/\">Skillfully Using Signals in Angular &#8211; Selected Hints for Professional Use<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><span class=\"wp-post-series-box__current\">When (Not) to use Effects in Angular &#8212; and what to do instead<\/span><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/asynchronous-resources-with-angulars-new-resource-api\/\">Asynchronous Data Flow with Angular&#8217;s new Resource API<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/streaming-resources-in-angular-19-2-details-and-semantics\/\">Streaming Resources in Angular &#8211; Details and Semantics<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/streaming-resources-for-a-chat-with-web-sockets-messages-in-a-glitch-free-world\/\">Streaming Resources for a Chat with Web Sockets: Messages in a Glitch-Free World<\/a><\/li>\n\t\t\t\t\t\t\t\t\t<li><a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/learning-httpresource-with-super-mario\/\">Angular&#8217;s new httpResource<\/a><\/li>\n\t\t\t\t\t\t\t<\/ol>\n\t\t<\/div>\n\t<\/div>\n<p>As the Angular docs mention that Effects are rarely needed in most applications, there is some confusion about how and when to use them. With this article, I try to shed some light on this topic in an objective and emotionless way.<\/p>\n<h2>The Main Use Case for Effects<\/h2>\n<p>Effects are primarily for rendering stuff you cannot render using data binding. <\/p>\n<p>Here are some examples you can also find in the <a href=\"https:\/\/angular.dev\/guide\/signals#effects\">docs<\/a>:<\/p>\n<p>1) Logging<br \/>\n2) Painting on a Canvas<br \/>\n3) Custom DOM behavior<\/p>\n<p>As data binding is the preferred way to display data to the user, it's obvious why the docs tell us effects are only sometimes needed.<\/p>\n<p>A good example for 2) is <a href=\"https:\/\/x.com\/Nartc1410\">Chau Tran<\/a>'s fantastic library <a href=\"https:\/\/angular-threejs.netlify.app\">Angular Three<\/a>, bridging Angular and Three.js. <\/p>\n<p>3) is about DOM behavior that cannot be expressed via the template syntax. An example is showing a <code>SnackBar<\/code> with an imperative API, e.g., the one in Angular Material.<\/p>\n<h2>Keep Auto-Tracking in Mind<\/h2>\n<p>Please remember that Angular uses implicit tracking (auto-tracking) for <code>computed<\/code> and <code>effects<\/code>. In the following example, the effect will track the <code>error<\/code> Signal even though it's not directly used in the effect function but inside the called <code>logError<\/code> method.<\/p>\n<pre><code class=\"language-typescript\">effect(() =&gt; {\n  this.logError();\n});\n:\nlogError(): void {\n  const error = this.error();\n  if (error) {\n    console.error(error);\n  }\n}<\/code><\/pre>\n<p>This also emphasizes that Angular's current Effects implementation is primarily intended for rendering. Signals touched during rendering are tracked. If you change them, rendering kicks in again. Angular's <a href=\"https:\/\/x.com\/synalx\">Alex Rickabaugh<\/a> discussed this design decision in this <a href=\"https:\/\/github.com\/angular\/angular\/issues\/56155#issuecomment-2177202036\">GitHub Issue<\/a>.<\/p>\n<h2>When NOT to use Effects?<\/h2>\n<p>The <a href=\"https:\/\/angular.dev\/guide\/signals#effects\">docs<\/a> also explicitly mention to NOT use effects for propagating state. There are several possible issues, such as circular updates. I would add: The auto-tracking behavior can quickly lead to code that becomes hard to maintain. This is also discussed the mentioned <a href=\"https:\/\/github.com\/angular\/angular\/issues\/56155#issuecomment-2177202036\">GitHub issue<\/a>. <\/p>\n<p>Furthermore, Effects make your code more imperative and less declarative. The latter is in the sense of reactive programming. If you want to know how to make your code more declarative, my GDE fellow <a href=\"https:\/\/x.com\/mfpears\">Mike F. Pearson<\/a>, who is the author of <a href=\"https:\/\/state-adapt.github.io\/angular\">StateAdapt<\/a>, has you covered.<\/p>\n<p>Another thing we need to keep in mind is that Signals are glitch-free: If you change a Signal several times in a row (within a stack frame), only the last change is seen. This fits for rendering but also shows that Signals are not suited for representing events. <\/p>\n<h2>Effects for Reactive Helpers<\/h2>\n<p>While not mentioned in the docs, Effects are also used behind the covers to build reactive helpers. An example is <code>toObservable<\/code> in Angular, <code>rxMethod<\/code> in the NGRX Signal Store, and the many helpers in <a href=\"https:\/\/x.com\/Nartc1410\">Chau Tran<\/a>'s and <a href=\"https:\/\/x.com\/Enea_Jahollari\">Enea Jahollari<\/a>'s library <a href=\"https:\/\/ngxtension.netlify.app\/\">ngxtension<\/a>.<\/p>\n<p>I will come back to this topic at the end of this short article.<\/p>\n<h2>Reacting on Signal Changes<\/h2>\n<p>So far, we have discussed when to use effects and when they are to be avoided. However, this leaves a question that usually arises quickly: How to react to changing Signals?<\/p>\n<p>There are several answers:<\/p>\n<p>1) Derive your state via computed or the Resource API<br \/>\n2) Use the event behind the Signal change<br \/>\n3) Use RxJS<br \/>\n4) Use a reactive helper<\/p>\n<p>Using computed is the way to go when you can derive the needed value from existing Signals <em>synchronously<\/em>. For an asynchronous derivation, Angular provides the <a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/asynchronous-resources-with-angulars-new-resource-api\/\">Resource API<\/a>.<\/p>\n<p>In the case of 2), you don't track the Signal change but react to the Event behind it:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/events-behind.png\" style=\"max-width:400px\"><\/p>\n<p>Using the event behind the change mitigates issues mentioned above, such as issues with auto-tracking or circular updates.<\/p>\n<p>With 3), I mean using RxJs instead or in addition to Signals. In the latter case, you convert between the two worlds with Angular's RxJS interop, providing functions like <code>toObservable<\/code> and <code>toSignal<\/code>. RxJS allows you to have a reactive flow end-to-end, e.g., from the user's interaction to the output. Please also keep in mind that RxJS' flattening operators, such as <code>switchMap,<\/code> provide guarantees in terms of overlapping requests and hence help to avoid race conditions. My GDE fellow <a href=\"https:\/\/github.com\/niklas-wortmann\">Jan-Niklas Wortmann<\/a> discussed this topic during his <a href=\"https:\/\/www.youtube.com\/watch?v=p2JGWnUmdNw\">Session about reactivity in Angular Applications<\/a> at ng-conf 2024.<\/p>\n<p>Examples of reactive helpers, as mentioned in 4), are <code>rxMethod<\/code> in <a href=\"https:\/\/ngrx.io\/guide\/signals\/signal-store\">NGRX Signal Store<\/a> or <code>deriveAsync<\/code> in <a href=\"https:\/\/ngxtension.netlify.app\/\">ngxtension<\/a>. A method set up with <code>rxMethod<\/code> can take a Signal and connect it to an RxJS-based pipe:<\/p>\n<pre><code class=\"language-typescript\">this.store.rxLoad(this.id);<\/code><\/pre>\n<p>Here is the simple Signal Store implementing <code>rxLoad<\/code>:<\/p>\n<pre><code class=\"language-typescript\">export const DessertDetailStore = signalStore(\n    { providedIn: &#039;root&#039; },\n    withState({\n        dessert: initDessert,\n        loading: false\n    }),\n    withMethods((\n        store,\n        dessertService = inject(DessertService)\n    ) =&gt; ({\n        rxLoad: rxMethod&lt;number&gt;(pipe(\n            tap(() =&gt; patchState(store, { loading: true })),\n            switchMap((id) =&gt; dessertService.findById(id)),\n            tap((dessert) =&gt; patchState(store, { dessert, loading: false })),\n        )),\n    }))\n);<\/code><\/pre>\n<p>For the sake of simplicity, this example does not contain error handling.<\/p>\n<h2>More on this: Angular Architecture Workshop (online, interactive, advanced)<\/h2>\n<p>Become an expert for enterprise-scale and maintainable Angular applications with our <a href=\"https:\/\/www.angulararchitects.io\/en\/angular-workshops\/advanced-angular-enterprise-architecture-incl-ivy\/\">Angular Architecture workshop!<\/a><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/sujet-en.jpg\" alt=\"\" \/><\/p>\n<p><a href=\"https:\/\/www.angulararchitects.io\/en\/angular-workshops\/advanced-angular-enterprise-architecture-incl-ivy\/\">All Details (English Workshop)<\/a> | <a href=\"https:\/\/www.angulararchitects.io\/schulungen\/advanced-angular-enterprise-anwendungen-und-architektur\/\">All Details (German Workshop)<\/a><br \/>\n<\/p>\n<h2>For and Against explicitEffect<\/h2>\n<p>Another often discussed helper that is also discussed by Alex Rickabough in the <a href=\"https:\/\/github.com\/angular\/angular\/issues\/56155#issuecomment-2177202036\">mentioned GitHub Issue<\/a> is <code>explicitEffect<\/code>. The library <a href=\"https:\/\/ngxtension.netlify.app\/\">ngxtension<\/a> provides an implementation. Basically, it's a combination of <code>effect<\/code> and <code>untracked<\/code> to restrict tracking to several explicitly mentioned Signals:<\/p>\n<pre><code class=\"language-typescript\">explicitEffect(this.id, (id) =&gt; {\n  this.store.load(id);\n});<\/code><\/pre>\n<p>In this case, only the <code>id<\/code> Signal is tracked. An explicit Effect is a simple way to mitigate the drawbacks of auto-tracking when using effects for something beyond rendering as discussed above. However, it does not compensate for other already discussed issues that come with using effects for such tasks. For instance, you can  end up with cyclic updates and code that is hard to reason about. Also, code like this is imperative and, hence, not in the sense of the reactive paradigm, where we try to have declarative code and a reactive chain bridging inputs and outputs.<\/p>\n<p>If you favor the reactive paradigm, you will avoid <code>explicitEffect<\/code>. Instead, you will very likely go with RxJS or helpers like <code>rxMethod<\/code>, the many declarative ones in <a href=\"https:\/\/ngxtension.netlify.app\/\">ngxtension<\/a>, or Angular's <a href=\"https:\/\/www.angulararchitects.io\/en\/blog\/asynchronous-resources-with-angulars-new-resource-api\/\">Resource API<\/a>. This is also the recommented approach. If this is not the case for you, you and your teammates should be aware of the consequences that come with using this kind of effect.<\/p>\n<h2>Summary<\/h2>\n<p>Effects are primarily for rending stuff that cannot be rendered via data binding. Examples are logging, painting on a canvas, or custom DOM behavior, such as displaying a <code>SnackBar<\/code> with an imperative API like the one in Angular Material. To react to a Signal Change, you should favor <code>computed<\/code> if the needed value can be synchronously derived or the Resource API for asynchronous derivations. Also, use the events behind Signal changes, RxJS, or or reactive helpers to establish a reactive end-to-end chain.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is post 5 of 9 in the series &ldquo;Signals&rdquo; Signals in Angular: Building Blocks Component Communication with Signals: Inputs, Two-Way Bindings, and Content\/ View Queries Successful with Signals in Angular &#8211; 3 Effective Rules for Your Architecture Skillfully Using Signals in Angular &#8211; Selected Hints for Professional Use When (Not) to use Effects in [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":26615,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-26619","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","post_series-signals"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"This is post 5 of 9 in the series &ldquo;Signals&rdquo; Signals in Angular: Building Blocks Component Communication with Signals: Inputs, Two-Way Bindings, and Content\/ View Queries Successful with Signals in Angular &#8211; 3 Effective Rules for Your Architecture Skillfully Using Signals in Angular &#8211; Selected Hints for Professional Use When (Not) to use Effects in [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2024-09-09T01:06:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-04T15:03:13+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/sujet-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Manfred Steyer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/sujet-1.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manfred Steyer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\"},\"author\":{\"name\":\"Manfred Steyer\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\"},\"headline\":\"When (Not) to use Effects in Angular &#8212; and what to do instead\",\"datePublished\":\"2024-09-09T01:06:55+00:00\",\"dateModified\":\"2025-06-04T15:03:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\"},\"wordCount\":1026,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\",\"name\":\"When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg\",\"datePublished\":\"2024-09-09T01:06:55+00:00\",\"dateModified\":\"2025-06-04T15:03:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg\",\"width\":1000,\"height\":667},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"When (Not) to use Effects in Angular &#8212; and what to do instead\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\",\"name\":\"Manfred Steyer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"caption\":\"Manfred Steyer\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/","og_locale":"en_US","og_type":"article","og_title":"When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects","og_description":"This is post 5 of 9 in the series &ldquo;Signals&rdquo; Signals in Angular: Building Blocks Component Communication with Signals: Inputs, Two-Way Bindings, and Content\/ View Queries Successful with Signals in Angular &#8211; 3 Effective Rules for Your Architecture Skillfully Using Signals in Angular &#8211; Selected Hints for Professional Use When (Not) to use Effects in [&hellip;]","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/","og_site_name":"ANGULARarchitects","article_published_time":"2024-09-09T01:06:55+00:00","article_modified_time":"2025-06-04T15:03:13+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/sujet-1.jpg","type":"image\/jpeg"}],"author":"Manfred Steyer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/sujet-1.jpg","twitter_misc":{"Written by":"Manfred Steyer","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/"},"author":{"name":"Manfred Steyer","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a"},"headline":"When (Not) to use Effects in Angular &#8212; and what to do instead","datePublished":"2024-09-09T01:06:55+00:00","dateModified":"2025-06-04T15:03:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/"},"wordCount":1026,"commentCount":0,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/","name":"When (Not) to use Effects in Angular - and what to do instead - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg","datePublished":"2024-09-09T01:06:55+00:00","dateModified":"2025-06-04T15:03:13+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2024\/09\/shutterstock_2107953416.jpg","width":1000,"height":667},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/when-not-to-use-effects-in-angular-and-what-to-do-instead\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"When (Not) to use Effects in Angular &#8212; and what to do instead"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a","name":"Manfred Steyer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","caption":"Manfred Steyer"}}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/26619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=26619"}],"version-history":[{"count":6,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/26619\/revisions"}],"predecessor-version":[{"id":30520,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/26619\/revisions\/30520"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/26615"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=26619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=26619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=26619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}