SlideShare uma empresa Scribd logo
1 de 100
Predictable Reactive State Management - NGRX
About me: {
"name": "Ilia Idakiev",
"experience": [
"Lecturer in 'Advanced JS' @ FMI",
"Developer / Manager / Owner @ HNS",
"Project Consulting",
"Angular 2 Course @ HackBulgaria 2016",
"Angular 2 Course @ HackBulgaria 2017",
"Organizing and Lecturing Private Courses"
],
"involvedIn": [ "SofiaJS", "BeerJS" ]
}
Schedule
1. Functional programming.
2. Functional concepts.
3. Category Theory.
4. Observer and Iterator pattern overview.
5. RxJS
6. Change Detection
7. Redux
8. NGRX
Functional Programming and
Angular?
1. RXJS
2. NGRX
Functional Programming
Functional programming is a programming
paradigm that treats computation as the
evaluation of mathematical functions and
avoids changing-state and mutable data. It
is a declarative programming paradigm,
which means programming is done with
expressions or declarations instead of
statements.
Declarative vs Imperative
Functional Programming Advantages
• Clean code - easier to test, debug and reason about.
• Modularity - large problems are broken into small parts
• Reusability - common helper functions, due to the modularity
• Reduced coupling - Less amount of dependency between
modules
Functional JavaScript
JS array methods we need to know
• map(fn) - fn will be called for each element of the array with args:
(currentValue, index, array) and the returned value will be the new
element in the result array.
• filter(fn) - fn will be called for each element and it needs to return true if
the current value should be added to the result array and false
otherwise.
• reduce(accFn, acc) - accFn will be called for each element of the array
with argumenst (accumulator, currentValue, index). If its the first call
accumulator will be acc from the reduce call. Otherwise it will be the
previously returned result from the accFn.
Example
Functional concepts
• Using functions and arrays for flow control
• Pure functions, arrow functions, anonymous functions, recursive functions
• Functions as First Class Citizens
• Using: map(), filter() and reduce()
• Currying and Partial Application
• Lazy evaluation
• Composition (Math)
Referential Transparency
Referential Transparency
An expression is said to be referentially transparent if it
can be replaced with its corresponding value without
changing the program's behavior.
Pure Functions
• The function always evaluates the same result value given the
same argument value(s)
• Evaluation of the result does not cause any semantically
observable side effect or output, such as mutation of mutable
objects or output to I/O devices
Functions - First Class Citizens
• Functions can be assigned to variables
• Functions can be passed as arguments
Lazy evaluation
• Call-by-need and deffered execution, is an evaluation strategy
that waits until the value is needed to compute the result of a
function.
• Using it can result in a major increase in performance
Currying and Partial Application
• Currying is the technique of translating the evaluation of a
function that takes multiple arguments into evaluating a
sequence of functions.
• Partial application refers to the process of fixing a number of
arguments to a function, producing another function of
smaller arity.
Example (1)
Example (2)
Curry Function
Category Theory
Categories
Sets with the same type

numbers, strings, arrays, dates, objects, booleans, etc.
Morphisms
Pure functions - mappings between types
Functors
Functors are mappings between categories.





Functions that lift values out of a container, morph them, and put them into a
new container.
The first input is a morphism for the type and the second input is the container.
Functors
Monads
Monads are structures that are used as containers and they help
you compose functions.
Maybe Monad
Maybe with explicit composition
Maybe composition
Promises
Promises
Implement map and flatMap through then, so it is a functor and a
monad
Resources
https://github.com/fantasyland/fantasy-land

http://ramdajs.com/


http://folktalejs.org/
Iterator Pattern
Iterator Pattern
• Used for traversing collections of objects
• It provides a simple method for selecting,
sequentially, the next item in the
collection.
• An iterator can be used to generate
values
Iterator Pattern
ES2015 Iterator
Observer Pattern
Observer Pattern
• Used to notify observers when the value
on an object has changed.
Reactive Extensions

http://reactivex.io
Reactive Extensions
• Library for composing asynchronous and event-based programs
by using observable sequences.
• Extends the observer pattern to support sequences of data and/
or events
• Adds operators that allow you to compose sequences together
declaratively
RxJS
• Original Project: https://github.com/Reactive-Extensions/RxJS
• Rewrite: https://github.com/ReactiveX/rxjs 

(better performance, better modularity, better debuggable call
stacks, while staying mostly backwards compatible, with some
breaking changes that reduce the API surface)
Angular & RxJS
• Routing
• Forms Validation
• State Management
• Http Service
Example
Promises vs Observables
• Observables are lazy
• Promises emit only one value
• We can cancel an observable
Example (2)
Example (3)
Example (4)
Operators and Observables
• https://github.com/Reactive-Extensions/RxJS/tree/
8fa95ac884181fb6cbff8ce7c1d669ffb190f5e4/src/modular/
observable



https://github.com/Reactive-Extensions/RxJS/tree/
8fa95ac884181fb6cbff8ce7c1d669ffb190f5e4/src/core/perf/operators
http://rxmarbles.com
http://jaredforsyth.com/rxvision/examples/playground/
Resources
Change Detection in Angular
zone.js
• Monkey patches the world - every single async api
• Provides context
The zone is an execution context that is passed to the callback
function of the async operation and when the callback is executed
the zone is alerted about the change.

($digest)
https://github.com/angular/zone.js/blob/master/lib/browser/browser.ts
Application State Change
• Events - click, submit, …
• XHR (Ajax) - Fetching data from a remote server
• Timers - setTimeout(), setInterval()
Change Detection Mechanism
Every Component has an change detector and what it does is:
1. When a change occurs the change detector compares for each
expression in the template the current value of the property
used in the expression with the previous value.
2. If the property value before and after is different, it sets
isChanged to true.
Change Detection
Change Detection
Change Detection
Change Detection
Angular 2 generates Virtual Machine (VM) friendly code
so it can perform thousands of Change Detection Runs
in milliseconds.
How to optimize the

Change Detection Traversal ?
Change Detection Strategies
• ChangeDetectionStrategy.OnPush 

The change detector's mode will be set to CheckOnce during
hydration (It compares values by reference)
• ChangeDetectionStrategy.Default 

The change detector's mode will be set to CheckAlways during
hydration
https://plnkr.co/edit/4HG4sDcdTleRXlNafETH?p=preview
State Management
Simple application
(Component - Service)
After one week ...
Components - Service
Things we have to manage
• Data that comes from the server and whether it's pending or
resulted in an error
• UI state like toggles, alerts and errors messages
• User input, filters and search queries
• Other
What changed?
Flux
• Flux is an architecture for creating data layers in JavaScript
applications.
• It places a focus on creating explicit and understandable
update paths for your application's data
• Helps tracing changes during development and makes bugs
easier to track down and fix
Flux
Redux
• Predictable state management
• Architecture that keeps the core principles of Flux by having
unidirectional data flow
• Redux applications have only one global, read-only
application state
• This state is calculated by "reducing" over a collection or stream
of actions that update it in controlled ways
Why Predictable?
Referential Transparency
Pure (Deterministic) Functions
Predictability
Redux Ideas
• Single State Tree
• Actions describe updates
• Reducer apply updates
Redux Contracts
• Reducers - Specification of how the state updates
• High Order Reducers - Functions that take reducer as argument,
take some additional arguments and return another reducer.
• Selectors - Takes the whole states and returns a derived state
Redux
in Angular
Redux
in Angular
Single responsibility?
Redux
in Angular
@ngrx
@ngrx/store
• Implementation of Redux for NG
• It uses RxJS Observables
@ngrx/effects
• Side effect model for @ngrx/store
@ngrx/router-store
• Bindings to connect angular/router to ngrx/store
@ngrx/store &
@ngrx/effects
Pros and cons using ngrx
1. Unidirectional data flow
2. Really helpful dev-tools (time travel)
3. Good code separation
4. Fast bug fixing due to 1, 2 and 3
5. Easier testing and reasoning due to pure functions and composition
6. Better angular performance with OnPush Strategy
7. State Serialization
8. More files and code
https://github.com/ngrx/store
Example
Install packages
Install devtools
Define store actions
app/store/app.actions.ts
Define state structure
app/store/app.reducer.ts
Define state
changes
app/store/app.reducer.ts
Create the reducer function
app/store/app.reducer.ts
Import store and devtools
app/store/app.module.ts
Create the app model
app/store/app.module.ts
Use the app model
app/todo-list/todo-list.component.ts
Use the app model
app/todo-list/todo-list.component.html
The reducer factory
app/store/reducer-factory.ts
Demo
Goal
• Abstract state to isolate state leaks
• Treat our program as a simple deterministic function with one
argument (the state) that results a massive mutation called DOM
Additional Libs
• reselect
• ngrx-store-freeze
ngrx resources
http://blog.ng-book.com/introduction-to-redux-with-typescript-and-angular-2/
https://gist.github.com/btroncone/a6e4347326749f938510
Talks repo:
https://github.com/iliaidakiev/slides

Mais conteúdo relacionado

Mais procurados

From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
confluent
 

Mais procurados (20)

Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
 
Redux data flow with angular 2
Redux data flow with angular 2Redux data flow with angular 2
Redux data flow with angular 2
 
Akka (1)
Akka (1)Akka (1)
Akka (1)
 
Ngrx: Redux in angular
Ngrx: Redux in angularNgrx: Redux in angular
Ngrx: Redux in angular
 
An Introduction to Redux
An Introduction to ReduxAn Introduction to Redux
An Introduction to Redux
 
Flink Forward SF 2017: Erik de Nooij - StreamING models, how ING adds models ...
Flink Forward SF 2017: Erik de Nooij - StreamING models, how ING adds models ...Flink Forward SF 2017: Erik de Nooij - StreamING models, how ING adds models ...
Flink Forward SF 2017: Erik de Nooij - StreamING models, how ING adds models ...
 
Redux in Angular2 for jsbe
Redux in Angular2 for jsbeRedux in Angular2 for jsbe
Redux in Angular2 for jsbe
 
Clean Architecture @ Taxibeat
Clean Architecture @ TaxibeatClean Architecture @ Taxibeat
Clean Architecture @ Taxibeat
 
State Models for React with Redux
State Models for React with ReduxState Models for React with Redux
State Models for React with Redux
 
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
From Zero to Streaming Healthcare in Production (Alexander Kouznetsov, Invita...
 
Reactors.io
Reactors.ioReactors.io
Reactors.io
 
Data architectures in Angular & NGRX Introduction
Data architectures in Angular & NGRX IntroductionData architectures in Angular & NGRX Introduction
Data architectures in Angular & NGRX Introduction
 
Ngrx
NgrxNgrx
Ngrx
 
Introduction to RxJS
Introduction to RxJSIntroduction to RxJS
Introduction to RxJS
 
Functional Programming in Java
Functional Programming in JavaFunctional Programming in Java
Functional Programming in Java
 
Workshop 22: React-Redux Middleware
Workshop 22: React-Redux MiddlewareWorkshop 22: React-Redux Middleware
Workshop 22: React-Redux Middleware
 
Introduction to RxJava on Android
Introduction to RxJava on AndroidIntroduction to RxJava on Android
Introduction to RxJava on Android
 
React state management with Redux and MobX
React state management with Redux and MobXReact state management with Redux and MobX
React state management with Redux and MobX
 
Flink Forward SF 2017: David Hardwick, Sean Hester & David Brelloch - Dynami...
Flink Forward SF 2017: David Hardwick, Sean Hester & David Brelloch -  Dynami...Flink Forward SF 2017: David Hardwick, Sean Hester & David Brelloch -  Dynami...
Flink Forward SF 2017: David Hardwick, Sean Hester & David Brelloch - Dynami...
 
Mobx for Dummies - Yauheni Nikanowich - React Warsaw #5
Mobx for Dummies - Yauheni Nikanowich - React Warsaw #5Mobx for Dummies - Yauheni Nikanowich - React Warsaw #5
Mobx for Dummies - Yauheni Nikanowich - React Warsaw #5
 

Semelhante a Predictable reactive state management - ngrx

Semelhante a Predictable reactive state management - ngrx (20)

Robust and declarative machine learning pipelines for predictive buying at Ba...
Robust and declarative machine learning pipelines for predictive buying at Ba...Robust and declarative machine learning pipelines for predictive buying at Ba...
Robust and declarative machine learning pipelines for predictive buying at Ba...
 
Understanding React hooks | Walkingtree Technologies
Understanding React hooks | Walkingtree TechnologiesUnderstanding React hooks | Walkingtree Technologies
Understanding React hooks | Walkingtree Technologies
 
Microservices Part 4: Functional Reactive Programming
Microservices Part 4: Functional Reactive ProgrammingMicroservices Part 4: Functional Reactive Programming
Microservices Part 4: Functional Reactive Programming
 
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay PlatonovSenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
SenchaCon 2016: Handling Undo-Redo in Sencha Applications - Nickolay Platonov
 
What’s expected in Spring 5
What’s expected in Spring 5What’s expected in Spring 5
What’s expected in Spring 5
 
20160609 nike techtalks reactive applications tools of the trade
20160609 nike techtalks reactive applications   tools of the trade20160609 nike techtalks reactive applications   tools of the trade
20160609 nike techtalks reactive applications tools of the trade
 
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
Automating Speed: A Proven Approach to Preventing Performance Regressions in ...
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0 Single Page Applications with AngularJS 2.0
Single Page Applications with AngularJS 2.0
 
Next generation of frontend architectures
Next generation of frontend architecturesNext generation of frontend architectures
Next generation of frontend architectures
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 
React JS & Functional Programming Principles
React JS & Functional Programming PrinciplesReact JS & Functional Programming Principles
React JS & Functional Programming Principles
 
Reactive programming with examples
Reactive programming with examplesReactive programming with examples
Reactive programming with examples
 
Monolithic and Procedural Programming
Monolithic and Procedural ProgrammingMonolithic and Procedural Programming
Monolithic and Procedural Programming
 
Modelling and Querying Sensor Services using Ontologies
Modelling and Querying Sensor Services using OntologiesModelling and Querying Sensor Services using Ontologies
Modelling and Querying Sensor Services using Ontologies
 
Android reactive programming using agera
Android reactive programming using ageraAndroid reactive programming using agera
Android reactive programming using agera
 
Scaling Analytics with Apache Spark
Scaling Analytics with Apache SparkScaling Analytics with Apache Spark
Scaling Analytics with Apache Spark
 
Angular js 1.0-fundamentals
Angular js 1.0-fundamentalsAngular js 1.0-fundamentals
Angular js 1.0-fundamentals
 
Ph.D. Dissertation Defense
Ph.D. Dissertation Defense Ph.D. Dissertation Defense
Ph.D. Dissertation Defense
 
Redux essentials
Redux essentialsRedux essentials
Redux essentials
 

Mais de Ilia Idakiev

Mais de Ilia Idakiev (14)

No more promises lets RxJS 2 Edit
No more promises lets RxJS 2 EditNo more promises lets RxJS 2 Edit
No more promises lets RxJS 2 Edit
 
Deep Dive into Zone.JS
Deep Dive into Zone.JSDeep Dive into Zone.JS
Deep Dive into Zone.JS
 
RxJS Schedulers - Controlling Time
RxJS Schedulers - Controlling TimeRxJS Schedulers - Controlling Time
RxJS Schedulers - Controlling Time
 
Creating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-htmlCreating lightweight JS Apps w/ Web Components and lit-html
Creating lightweight JS Apps w/ Web Components and lit-html
 
No More Promises! Let's RxJS!
No More Promises! Let's RxJS!No More Promises! Let's RxJS!
No More Promises! Let's RxJS!
 
Marble Testing RxJS streams
Marble Testing RxJS streamsMarble Testing RxJS streams
Marble Testing RxJS streams
 
Deterministic JavaScript Applications
Deterministic JavaScript ApplicationsDeterministic JavaScript Applications
Deterministic JavaScript Applications
 
Web Components Everywhere
Web Components EverywhereWeb Components Everywhere
Web Components Everywhere
 
Building Reusable Custom Elements With Angular
Building Reusable Custom Elements With AngularBuilding Reusable Custom Elements With Angular
Building Reusable Custom Elements With Angular
 
Offline progressive web apps with NodeJS and React
Offline progressive web apps with NodeJS and ReactOffline progressive web apps with NodeJS and React
Offline progressive web apps with NodeJS and React
 
Testing rx js using marbles within angular
Testing rx js using marbles within angularTesting rx js using marbles within angular
Testing rx js using marbles within angular
 
Angular server side rendering with NodeJS - In Pursuit Of Speed
Angular server side rendering with NodeJS - In Pursuit Of SpeedAngular server side rendering with NodeJS - In Pursuit Of Speed
Angular server side rendering with NodeJS - In Pursuit Of Speed
 
Introduction to Offline Progressive Web Applications
Introduction to Offline Progressive Web ApplicationsIntroduction to Offline Progressive Web Applications
Introduction to Offline Progressive Web Applications
 
Zone.js
Zone.jsZone.js
Zone.js
 

Último

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 

Último (20)

MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaSWSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With SimplicityWSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 

Predictable reactive state management - ngrx