{"id":7178,"date":"2021-01-19T20:30:05","date_gmt":"2021-01-19T19:30:05","guid":{"rendered":"http:\/\/www.unimedia.tech.mialias.net\/using-redux-with-angular\/"},"modified":"2024-01-10T18:34:58","modified_gmt":"2024-01-10T17:34:58","slug":"using-redux-with-angular","status":"publish","type":"post","link":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/","title":{"rendered":"Utilitzant Redux amb Angular"},"content":{"rendered":"\n<p><\/p>\n\n<p>Avui aprendrem a introduir l&#8217;\u00fas <a href=\"https:\/\/www.unimedia.tech\/dedicated-development-teams\/\">de la gesti\u00f3<\/a> de l&#8217;estat de REDUX<a href=\"https:\/\/www.unimedia.tech\/business-development-manager\/\"> <\/a>en una aplicaci\u00f3 web angular amb la biblioteca NGRX<\/p>\n\n<p>L&#8217;equivalent REDUX per a Angular \u00e9s <a href=\"https:\/\/ngrx.io\/\">NGRX<\/a> .<\/p>\n\n<p>Tamb\u00e9 us pot interessar: <a href=\"https:\/\/www.unimedia.tech\/2022\/02\/01\/unimedia-named-as-tech-leaders-by-clutch\/\">&#8220;Unimedia nomenat com a l\u00edders tecnol\u00f2gics per Clutch&#8221;<\/a><\/p>\n\n<p>A m\u00e9s, el nostre equip de desenvolupadors s\u00f3n experts en <a href=\"https:\/\/www.unimedia.tech\/software-development\/\">la creaci\u00f3 de software personalitzat<\/a> segons els requisits del projecte.<\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">Veurem cada bloc de construcci\u00f3 de NGRX pas a pas<\/h2>\n\n<p><\/p>\n\n<p><\/p>\n\n<p><\/p>\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/state-management-lifecycle.png\" alt=\"Diagrama del cicle de vida de la gesti&#xF3; de l'estat de NgRx\"\/><figcaption>Font: https:\/\/ngrx.io\/<\/figcaption><\/figure>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Botiga<\/h3>\n\n<p>El <strong>magatzem<\/strong> \u00e9s un contenidor d&#8217;estat controlat dissenyat per ajudar a escriure aplicacions de rendiment i escalables a sobre d&#8217;Angular.<\/p>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Efectes<\/h3>\n\n<p>Els <strong>efectes<\/strong> utilitzen fluxos per proporcionar <a href=\"https:\/\/martinfowler.com\/eaaDev\/EventSourcing.html\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">noves fonts<\/a> d&#8217;accions. Per modificar l&#8217;estat en funci\u00f3 d&#8217;interaccions externes, com ara sol\u00b7licituds de xarxa, missatges de connexi\u00f3 <a href=\"https:\/\/www.factoriacreativabarcelona.es\/diseno-web-barcelona\/\">web<\/a> i esdeveniments basats en el temps. Per tant, s\u00f3n el m\u00e8tode preferit per obtenir dades i mantenir part de la l\u00f2gica de l&#8217;aplicaci\u00f3.<\/p>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Selectors<\/h3>\n\n<p>Els Selectors s\u00f3n funcions pures utilitzades per obtenir porcions de l&#8217;estat de la botiga. Aix\u00ed, seleccionen peces d&#8217;informaci\u00f3 de la botiga que seran consumides per altres parts de la l\u00f2gica de l&#8217;aplicaci\u00f3.<\/p>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Reductors<\/h3>\n\n<p>Els reductors de NgRx s\u00f3n els responsables de gestionar les transicions d&#8217;un estat al seg\u00fcent a la vostra aplicaci\u00f3. Les funcions reductores gestionen aquestes transicions determinant quines <a href=\"https:\/\/ngrx.io\/guide\/store\/actions\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">accions<\/a> s&#8217;han de gestionar en funci\u00f3 del tipus d&#8217;acci\u00f3. En altres paraules, reben accions amb una c\u00e0rrega \u00fatil de dades i canvien l&#8217;estat emmagatzemant les dades noves com es desitgi.<\/p>\n\n<p>Despr\u00e9s d&#8217;entendre els blocs b\u00e0sics de la gesti\u00f3 de l&#8217;estat NGRX, ara construirem una aplicaci\u00f3 de xat petita d&#8217;exemple amb la gesti\u00f3 de l&#8217;estat NGRX.  <\/p>\n\n<p>Des de llavors, ja hem creat una aplicaci\u00f3 de xat anteriorment a una publicaci\u00f3 anterior <a href=\"https:\/\/www.unimedia.tech\/2020\/11\/27\/aws-amplify-with-angular-chat\/\">aqu\u00ed<\/a> . Com a resultat, introduirem la gesti\u00f3 de l&#8217;estat NGRX per actualitzar la interf\u00edcie d&#8217;usuari mentre s&#8217;envia\/recep el missatge.<\/p>\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-unimedia-technology wp-block-embed-unimedia-technology\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.unimedia.tech\/2020\/11\/27\/aws-amplify-with-angular-chat\/\n<\/div><\/figure>\n\n<h2 class=\"wp-block-heading\">1. Configurar el projecte<\/h2>\n\n<pre class=\"wp-block-code\"><code>\/** Clone Repo *\/\ngit clone https:\/\/github.com\/unimedia-technology\/amplify-chat-angular.git\n\n\/** Enter into project directory *\/\ncd amplify-chat-angular\n\n\/** Install the dependencies *\/\nnpm i\n\n\/** Create a new git branch *\/\ngit checkout ngrx\n<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">2. Instal\u00b7lar les depend\u00e8ncies NGRX<\/h2>\n\n<pre class=\"wp-block-code\"><code>ng add @ngrx\/store @ngrx\/effects @ngrx\/component<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">3. Crear accions<\/h2>\n\n<p>Aqu\u00ed, crearem 4 accions que s\u00f3n necess\u00e0ries per gestionar l&#8217;estat de l&#8217;aplicaci\u00f3 de xat.<\/p>\n\n<p><strong>Fitxer<\/strong> : store\/actions\/actions.ts<\/p>\n\n<pre class=\"wp-block-code\"><code>import { createAction, props } from '@ngrx\/store';\n\nexport const loadMessages = createAction('&#91;Chat] Load Messages', props&lt;{ channelId: string }&gt;());\nexport const loadMessagesSuccess = createAction('&#91;Chat] Load Messages Success', props&lt;{ messages: any&#91;] }&gt;());\n\nexport const sendMessage = createAction('&#91;Chat] Send Message', props&lt;{ message }&gt;());\nexport const addMessageToList = createAction('&#91;Chat] Add Message To List', props&lt;{ message }&gt;());<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">4. Crear efectes<\/h2>\n\n<p><strong>Els efectes<\/strong> ofereixen una manera d&#8217;interactuar amb aquests serveis i a\u00efllar-los dels components.<\/p>\n\n<h3 class=\"wp-block-heading\">\u00das<\/h3>\n\n<p>Els efectes s\u00f3n \u00fatils, si voleu gestionar tasques com ara obtenir dades, tasques de llarga durada que produeixen diversos esdeveniments i altres interaccions externes.<\/p>\n\n<p><\/p>\n\n<p><strong>Nota:<\/strong> per recordar, en la majoria dels escenaris, enviar\u00e0 accions, per\u00f2 no \u00e9s obligatori enviar sempre accions.  <\/p>\n\n<p>Per escriure efectes sense enviar les accions, passeu el segon par\u00e0metre a<code><em><strong>createEffect()<\/strong><\/em><\/code> funcions amb  <code><strong><em>{ dispatch: false }<\/em><\/strong><\/code><\/p>\n\n<p><strong>Fitxer:<\/strong> state\/effects\/effects.ts<\/p>\n\n<p><\/p>\n\n<pre class=\"wp-block-code\"><code>import { Actions, createEffect, ofType } from '@ngrx\/effects';\nimport { Injectable } from '@angular\/core';\nimport { map, switchMap } from 'rxjs\/operators';\nimport * as chatActions from '..\/actions\/actions';\nimport { from } from 'rxjs';\nimport { APIService } from '..\/..\/API.service';\n\n@Injectable()\nexport class ChatEffects {\n\n  constructor(\n    private actions$: Actions,\n    private api: APIService,\n  ) { }\n\n  \/** Load the List of Messages *\/\n  loadMessages$ = createEffect(() =&gt; this.actions$.pipe(\n    ofType(chatActions.loadMessages),\n    switchMap(({ channelId }) =&gt; {\n      return from(this.api.MessagesByChannelId(channelId)).pipe(\n        map((res: any) =&gt; {\n          return chatActions.loadMessagesSuccess({ messages: res.items });\n        }),\n      );\n    })\n  ));\n\n  \/** Send message and call no actions *\/\n  sendMessage$ = createEffect(() =&gt; this.actions$.pipe(\n    ofType(chatActions.sendMessage),\n    switchMap(({ message }) =&gt; {\n      return from(this.api.CreateMessage(message));\n    })\n  ), { dispatch: false });\n}<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">5. Crear reductors<\/h2>\n\n<p>Cada funci\u00f3 de reducci\u00f3 pren el m\u00e9s recent<code><a href=\"https:\/\/ngrx.io\/api\/store\/Action\">Action<\/a><\/code> enviat, l&#8217;estat actual i determina si es retorna un estat recent modificat o l&#8217;estat original. Ara, en l&#8217;exemple seg\u00fcent us guiarem sobre com escriure funcions reductores, registreu-les al vostre<code><a href=\"https:\/\/ngrx.io\/api\/store\/Store\">Store<\/a><\/code> , i compondre estats de caracter\u00edstiques.<\/p>\n\n<p><strong>Fitxer:<\/strong> store\/reducers\/reducers.ts<\/p>\n\n<p><\/p>\n\n<pre class=\"wp-block-code\"><code>import { Action, createReducer, on } from '@ngrx\/store';\nimport * as chatActions from '..\/actions\/actions';\n\nexport interface IChatState {\n  messages: any&#91;];\n}\n\n\/** Initial State *\/\nexport const initialState: IChatState = {\n  messages: &#91;],\n};\n\nexport function chatReducer(state: IChatState | undefined, action: Action): IChatState {\n  return reducer(state, action);\n}\n\nconst reducer = createReducer&lt;IChatState&gt;(\n  initialState,\n\n  \/** Loaded Messafes *\/\n  on(chatActions.loadMessagesSuccess, (state, { messages }) =&gt; ({\n    ...state,\n    messages\n  })),\n\n  \/** Add message to the messages array *\/\n  on(chatActions.addMessageToList, (state, { message }) =&gt; ({\n    ...state,\n    messages: &#91;...state.messages, message]\n  })),\n);\n<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">6. Crear selectors<\/h2>\n\n<p>El selector que hem creat aqu\u00ed retornar\u00e0 l&#8217; <strong>observable<\/strong> de tots els missatges<\/p>\n\n<p><strong>Fitxer:<\/strong> store\/selectors\/selectors.ts<\/p>\n\n<p><\/p>\n\n<pre class=\"wp-block-code\"><code>import { createSelector } from '@ngrx\/store';\n\nexport const selectChatState = (state) =&gt; state;\n\nexport const selectMessages = createSelector(\n  selectChatState,\n  (state) =&gt; state.chat.messages\n);\n<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">7. Gestionar l&#8217;Estat<\/h2>\n\n<p>En aquesta secci\u00f3, veurem quins s\u00f3n tots els esdeveniments on hem d&#8217;actualitzar l&#8217;estat:<\/p>\n\n<ul class=\"wp-block-list\"><li>Carregar l&#8217;aplicaci\u00f3<\/li><li>Enviament d&#8217;un missatge<\/li><li>Recepci\u00f3 d&#8217;un missatge<\/li><\/ul>\n\n<p><\/p>\n\n<p><strong>Fitxer:<\/strong> app.component.ts<\/p>\n\n<pre class=\"wp-block-code\"><code>import { Component, OnInit } from '@angular\/core';\nimport { NavigationEnd, Router, RouterEvent } from '@angular\/router';\nimport { select, Store } from '@ngrx\/store';\nimport { Observable } from 'rxjs';\nimport { delay } from 'rxjs\/operators';\nimport { APIService } from '.\/API.service';\nimport { addMessageToList, loadMessages, sendMessage } from '.\/store\/actions\/actions';\nimport { IChatState } from '.\/store\/reducers\/reducer';\nimport { selectMessages } from '.\/store\/selectors\/selectors';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: '.\/app.component.html',\n  styleUrls: &#91;'.\/app.component.scss']\n})\nexport class AppComponent implements OnInit {\n  title = 'amplify-chat-angular';\n  username: string;\n  messages: Observable&lt;any&#91;]&gt;;\n\n  constructor(\n    private api: APIService,\n    private router: Router,\n    private store: Store&lt;IChatState&gt;\n  ) { }\n\n  ngOnInit(): void {\n    this.router.events.subscribe((events: RouterEvent) =&gt; {\n      if (events instanceof NavigationEnd) {\n        const qParams = this.router.routerState.snapshot.root.queryParams;\n        if (qParams &amp;&amp; qParams.user) {\n          this.username = qParams.user;\n        } else {\n          this.router.navigate(&#91;'\/'], { queryParams: { user: 'Dave' } });\n        }\n      }\n    });\n\n    this.listMessages();\n    this.onCreateMessage();\n  }\n\n  send(event, inputElement: HTMLInputElement): void {\n    event.preventDefault();\n    event.stopPropagation();\n    const input = {\n      channelID: '2',\n      author: this.username.trim(),\n      body: inputElement.value.trim()\n    };\n\n    this.store.dispatch(sendMessage({ message: input }));\n    inputElement.value = '';\n  }\n\n  listMessages(): void {\n    this.store.dispatch(loadMessages({ channelId: '2' }));\n    this.messages = this.store.pipe(\n      select(selectMessages),\n      delay(10)\n    );\n  }\n\n  onCreateMessage(): void {\n    this.api.OnCreateMessageListener.subscribe(\n      {\n        next: (val: any) =&gt; {\n          console.log(val);\n          this.store.dispatch(addMessageToList({ message: val.value.data.onCreateMessage }));\n        }\n      }\n    );\n  }\n}<\/code><\/pre>\n\n<p><\/p>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Explicaci\u00f3<\/h3>\n\n<ul class=\"wp-block-list\"><li><code>listMessages<\/code>  enviaments de m\u00e8todes<code> loadMessages<\/code> acci\u00f3 amb<code>channelId<\/code> per recollir tots els missatges.<\/li><li>Quan l&#8217;usuari envia un missatge,<code>sendMessage<\/code> es crida l&#8217;acci\u00f3 i envia el missatge.<\/li><li>Quan l&#8217;usuari rep un missatge,<code>addMessageToList<\/code> s&#8217;envia l&#8217;acci\u00f3 i afegeix el missatge<code>messages<\/code> llista<\/li><\/ul>\n\n<p><\/p>\n\n<h2 class=\"wp-block-heading\">8. Crea una plantilla<\/h2>\n\n<p>En aquesta secci\u00f3, farem servir,<code><em><strong>ngrxPush<\/strong><\/em><\/code> tub de<code><strong><em>@ngrx\/component<\/em><\/strong><\/code> .<\/p>\n\n<p>El<code>ngrxPush<\/code> la canonada serveix com a reempla\u00e7ament d&#8217;entrada de la<code>async<\/code> canonada.  <\/p>\n\n<p><strong><em><code>ngrxPush<\/code>  <\/em><\/strong>cont\u00e9 un maneig intel\u00b7ligent de la detecci\u00f3 de canvis que ens permetr\u00e0 executar-nos en mode de zona plena i sense cap canvi al codi.<\/p>\n\n<h3 class=\"wp-block-heading\">\u00das:<\/h3>\n\n<p>El<code><strong><em>ngrxPush<\/em><\/strong><\/code> la canonada es proporciona a trav\u00e9s del<code><strong><em>ReactiveComponentModule<\/em><\/strong><\/code> . Per tant, per utilitzar-lo afegiu el  <strong><em><code>ReactiveComponentModule<\/code> <\/em><\/strong>fins al<code>imports<\/code> del vostre <strong><em>NgModule<\/em><\/strong> .<\/p>\n\n<p><\/p>\n\n<p><strong>Fitxer<\/strong> : app.component.html<\/p>\n\n<p><\/p>\n\n<pre class=\"wp-block-code\"><code>&lt;div id=\"root\"&gt;\n  &lt;div class=\"container\"&gt;\n    &lt;div class=\"messages\"&gt;\n      &lt;div class=\"messages-scroller\"&gt;\n        &lt;ng-container *ngIf=\"messages$ | async as messages\"&gt;\n          &lt;ng-container *ngFor=\"let message of messages\"&gt;\n            &lt;div &#91;ngClass]=\"message.author === username ? 'message me' : 'message'\"&gt;\n              {{message.body}}\n            &lt;\/div&gt;\n          &lt;\/ng-container&gt;\n        &lt;\/ng-container&gt;\n      &lt;\/div&gt;\n\n    &lt;\/div&gt;\n    &lt;div class=\"chat-bar\"&gt;\n      &lt;div class=\"form\"&gt;\n        &lt;input #messageInput type=\"text\" name=\"messageBody\" placeholder=\"Type your message here\" value=\"\n          (keyup.enter)=\"send($event, messageInput)\" \/&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n<p><\/p>\n\n<p>Aix\u00f2 \u00e9s tot, ara estem gestionant l&#8217;estat mitjan\u00e7ant NGRX.<\/p>\n\n<p>T&#8217;ha agradat llegir aix\u00f2 i t&#8217;agradaria aprendre m\u00e9s sobre angular i redux?, aqu\u00ed hi ha un altre gran article, fes-hi una ullada!<\/p>\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.toptal.com\/angular\/why-use-ngrx\">https:\/\/www.toptal.com\/angular\/why-use-ngrx<\/a><\/li><\/ul>\n\n<p><\/p>\n\n<h3 class=\"wp-block-heading\">Unimedia Technology<\/h3>\n\n<p>Aqu\u00ed a <a href=\"https:\/\/www.unimedia.tech\/\">Unimedia Technology<\/a> tenim un equip de <strong>desenvolupadors angulars<\/strong> que poden desenvolupar els vostres taulers web i aplicacions web m\u00e9s dif\u00edcils.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avui aprendrem a introduir l&#8217;\u00fas de la gesti\u00f3 de l&#8217;estat de REDUX en una aplicaci\u00f3 web angular amb la biblioteca NGRX L&#8217;equivalent REDUX per a Angular \u00e9s NGRX . Tamb\u00e9 us pot interessar: &#8220;Unimedia nomenat com a l\u00edders tecnol\u00f2gics per Clutch&#8221; A m\u00e9s, el nostre equip de desenvolupadors s\u00f3n experts en la creaci\u00f3 de software [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":6588,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[196,218],"tags":[257,80],"class_list":["post-7178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-ca","category-technical-guides-ca","tag-gestio-destat","tag-ngrx"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.6 (Yoast SEO v27.1.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Utilitzant Redux amb Angular - Unimedia Technology<\/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.unimedia.tech\/ca\/using-redux-with-angular\/\" \/>\n<meta property=\"og:locale\" content=\"ca_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utilitzant Redux amb Angular\" \/>\n<meta property=\"og:description\" content=\"Avui aprendrem a introduir l&#8217;\u00fas de la gesti\u00f3 de l&#8217;estat de REDUX en una aplicaci\u00f3 web angular amb la biblioteca NGRX L&#8217;equivalent REDUX per a Angular \u00e9s NGRX . Tamb\u00e9 us pot interessar: &#8220;Unimedia nomenat com a l\u00edders tecnol\u00f2gics per Clutch&#8221; A m\u00e9s, el nostre equip de desenvolupadors s\u00f3n experts en la creaci\u00f3 de software [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/\" \/>\n<meta property=\"og:site_name\" content=\"Unimedia Technology\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.linkedin.com\/company\/unimedia-technology\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-19T19:30:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-10T17:34:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1120\" \/>\n\t<meta property=\"og:image:height\" content=\"660\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Unimedia\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@UnimediaCTO\" \/>\n<meta name=\"twitter:site\" content=\"@UnimediaCTO\" \/>\n<meta name=\"twitter:label1\" content=\"Escrit per\" \/>\n\t<meta name=\"twitter:data1\" content=\"Unimedia\" \/>\n\t<meta name=\"twitter:label2\" content=\"Temps estimat de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minuts\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Utilitzant Redux amb Angular - Unimedia Technology","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.unimedia.tech\/ca\/using-redux-with-angular\/","og_locale":"ca_ES","og_type":"article","og_title":"Utilitzant Redux amb Angular","og_description":"Avui aprendrem a introduir l&#8217;\u00fas de la gesti\u00f3 de l&#8217;estat de REDUX en una aplicaci\u00f3 web angular amb la biblioteca NGRX L&#8217;equivalent REDUX per a Angular \u00e9s NGRX . Tamb\u00e9 us pot interessar: &#8220;Unimedia nomenat com a l\u00edders tecnol\u00f2gics per Clutch&#8221; A m\u00e9s, el nostre equip de desenvolupadors s\u00f3n experts en la creaci\u00f3 de software [&hellip;]","og_url":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/","og_site_name":"Unimedia Technology","article_publisher":"https:\/\/www.linkedin.com\/company\/unimedia-technology\/","article_published_time":"2021-01-19T19:30:05+00:00","article_modified_time":"2024-01-10T17:34:58+00:00","og_image":[{"width":1120,"height":660,"url":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png","type":"image\/png"}],"author":"Unimedia","twitter_card":"summary_large_image","twitter_creator":"@UnimediaCTO","twitter_site":"@UnimediaCTO","twitter_misc":{"Escrit per":"Unimedia","Temps estimat de lectura":"7 minuts"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#article","isPartOf":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/"},"author":{"name":"Unimedia","@id":"https:\/\/www.unimedia.tech\/ca\/#\/schema\/person\/3a250aa22526d5c9ff6bc95bb380a5dd"},"headline":"Utilitzant Redux amb Angular","datePublished":"2021-01-19T19:30:05+00:00","dateModified":"2024-01-10T17:34:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/"},"wordCount":747,"commentCount":0,"publisher":{"@id":"https:\/\/www.unimedia.tech\/ca\/#organization"},"image":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png","keywords":["gesti\u00f3 d'estat","ngrx"],"articleSection":["Angular","Technical Guides"],"inLanguage":"ca","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/","url":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/","name":"Utilitzant Redux amb Angular - Unimedia Technology","isPartOf":{"@id":"https:\/\/www.unimedia.tech\/ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#primaryimage"},"image":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#primaryimage"},"thumbnailUrl":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png","datePublished":"2021-01-19T19:30:05+00:00","dateModified":"2024-01-10T17:34:58+00:00","breadcrumb":{"@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#breadcrumb"},"inLanguage":"ca","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/"]}]},{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#primaryimage","url":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png","contentUrl":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/How-to-Implement-NGRX-State-Management-in-Angular-Web-Application-4.png","width":1120,"height":660,"caption":"How to Implement NGRX State Management in Angular Web Application"},{"@type":"BreadcrumbList","@id":"https:\/\/www.unimedia.tech\/ca\/using-redux-with-angular\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.unimedia.tech\/ca\/"},{"@type":"ListItem","position":2,"name":"Utilitzant Redux amb Angular"}]},{"@type":"WebSite","@id":"https:\/\/www.unimedia.tech\/ca\/#website","url":"https:\/\/www.unimedia.tech\/ca\/","name":"Unimedia Technology","description":"Your software development partner","publisher":{"@id":"https:\/\/www.unimedia.tech\/ca\/#organization"},"alternateName":"Unimedia Tech","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.unimedia.tech\/ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ca"},{"@type":"Organization","@id":"https:\/\/www.unimedia.tech\/ca\/#organization","name":"Unimedia Technology","alternateName":"Unimedia Tech","url":"https:\/\/www.unimedia.tech\/ca\/","logo":{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/www.unimedia.tech\/ca\/#\/schema\/logo\/image\/","url":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/cloud_border-3.png","contentUrl":"https:\/\/www.unimedia.tech\/wp-content\/uploads\/2023\/12\/cloud_border-3.png","width":403,"height":309,"caption":"Unimedia Technology"},"image":{"@id":"https:\/\/www.unimedia.tech\/ca\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/unimedia-technology\/","https:\/\/x.com\/UnimediaCTO","https:\/\/www.instagram.com\/unimedia.technology\/"]},{"@type":"Person","@id":"https:\/\/www.unimedia.tech\/ca\/#\/schema\/person\/3a250aa22526d5c9ff6bc95bb380a5dd","name":"Unimedia","image":{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/www.unimedia.tech\/ca\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5901fd1c4628e2b48ffd4e47324e8fe0751b39e556a167f078471d4c4bec0f6f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5901fd1c4628e2b48ffd4e47324e8fe0751b39e556a167f078471d4c4bec0f6f?s=96&d=mm&r=g","caption":"Unimedia"}}]}},"_links":{"self":[{"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/posts\/7178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/comments?post=7178"}],"version-history":[{"count":0,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/posts\/7178\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/media\/6588"}],"wp:attachment":[{"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/media?parent=7178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/categories?post=7178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unimedia.tech\/ca\/wp-json\/wp\/v2\/tags?post=7178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}