SlideShare a Scribd company logo
From User Action to
Framework Reaction
Reactivity in modern Frontend Frameworks
Jonas Bandi
jonas.bandi@ivorycode.com
Twitter: @jbandi
- Freelancer, in den letzten 6 Jahren vor allem in Projekten
im Spannungsfeld zwischen modernen Webentwicklung
und traditionellen Geschäftsanwendungen.
- Dozent an der Berner Fachhochschule seit 2007
- In-House Kurse:Web-Technologien im Enterprise
UBS, Postfinance, Mobiliar, SBB, BIT, BSI, Elca ...
JavaScript / Angular / React / Vue.js
Schulung / Beratung / Coaching / Reviews
jonas.bandi@ivorycode.com
http://ivorycode.com/#schulung
Agenda
Intro
Baseline:
"Out of the Box"-Reactivity of , and
(Slides and Demos)
Further Explorations:
Demos and Code Explorations
https://github.com/jbandi/framework-reactivity
Reactivity ?
Reactive Programming?
In computing, reactive programming is a declarative
programming paradigm concerned with data
streams and the propagation of change.
- Wikipedia
Reactive programming is programming
with asynchronous data streams.
Andre Staltz
The introduction to Reactive Programming you've been missing
https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
click$	
		.pipe(scan(count	=>	count	+	1,	0))	
		.subscribe(count	=>	console.log(`Clicked	${count}	times`));
From User Action to Framework Reaction
In the Beginning there
was Darkness ...
... then the DOM was created.
... and we manipulated
the DOM ...
$(".menu-item")	
.removeClass("active")	
.addClass("inactive	")	
.css("padding-left",	"0px")	
.find(".trigger")	
.click(function(ev)	{	
			//	spaghetti	carbonara?	
})	
.each(function	()	{	
		 //	spaghetti	napoli?	
});
... the Dark Ages of DOM ...
... a new hope ...
Model View Controller
Client Side MVC
HTML
Browser
Model:
POJOs
Controller
View
DOM
Server
initial loadAJAX
Thou shalt not manipulate
the DOM!
the DOM *is* updated
State is Managed in JavaScript
Action:
change
state
Reaction:
re-render
Dom
Ajax
Timeout
...
User
trigger
State
Reactivity:The framework reacts on state
changes and updates the UI.
DOM
UI
EvanYou - Reactivity in Frontend JavaScript Frameworks: https://www.youtube.com/watch?v=r4pNEdIt_l4
http://teropa.info/blog/2015/03/02/change-and-its-detection-in-javascript-frameworks.html
Reactivity:What and Why?
Traditional
"DOM-centric"
applications
UI = state
Browsers have "built-in" reactivity: If the DOM is
changed, the UI is re-rendered.
UI = f(state)
With modern SPA
architectures (MVC,
MVP, Components …) the
client state is
represented as
JavaScript objects.
The UI that you can see and manipulate
on screen is the result of painting a
visual representation of data.
Reactive programming in general addresses the question: How to
deal with change over time?
The UI should (automatically) re-render when the state changes.
When to call?
https://blog.danlew.net/2017/07/27/an-introduction-to-functional-reactive-programming/
https://twitter.com/Rich_Harris/status/1058751085706383362
Baseline: Core Reactivity
Zone.js
Change	
Detection
Angular Default Reactivity
@Component({	
		selector:	'app-counter',	
		template:	`	
				<div>	
						{{count}}	
				</div>	
		`	
})	
export	class	CounterComponent	implements	OnInit	{	
		count	=	0;	
		ngOnInit()	{	
				setInterval(()	=>	{	this.count++;	},	1000);	
		}	
}
Zone.js:
The "Magic" in Angular Change Detection
Zone.js is a JavaScript library provided by the Angular project that
patches many asynchronous browser APIs. Listeners can then be
triggered when these APIs are executed.
Angular relies on Zone.js to trigger automatic change detection.
Angular is running inside the NgZone (a zone created via
Zone.js).When async APIs are executed Angular gets notified
when the execution has finished and triggers change detection.
https://github.com/angular/zone.js/
https://medium.com/better-programming/zone-js-for-angular-devs-573d89bbb890
Patched APIs (examples): setTimeout, Promise, XMLHttpRequest, prompt
and DOM events.
More details: https://github.com/angular/angular/blob/master/packages/zone.js/STANDARD-APIS.md
Default Reactivity in Angular
UI = f(state)
Triggered by Zone.js
"simulated reactivity"
setInterval(	
1000);
Zone.js
"Zone to Angular":
Hey, there might be something going on ...
apply minimal
changes.
DOM
()	=>	this.count++
State
count:	42
let's check
everything ...
increase
<div>42</div>
change
detection
"simulated reactivity"
Default Change Detection
As default Angular detects changes by inspecting the state of all
components every time change detection is triggered.
Component
Component Component
Component Component
event
trigger change detection
on app
propagate change
detection to
children
propagate change
detection to
children
CD
CD
CD
CD
CD
Change detection is always
triggered at the top of the
component hirarchy and
propagates down to each child.
Every value used in a template
is inspected and compared to
the previous value.
Zone.js Checking all components
on every possible event can
be performance intense.
Default Reactivity in Angular
Zone.js with Default Change Detection:
• are a form of simulated reactivity: the framework
does not react to changes but to events that might
potentially resulted in changes
• are a form of transparent reactivity: It makes
reactivity an implicit characteristic of your program.
TheTaxonomy of Reactive Programming: https://vsavkin.com/the-taxonomy-of-reactive-programming-d40e2e23dee4
https://github.com/meteor/docs/blob/version-NEXT/long-form/tracker-manual.md
A common alternative in Angular is to model Reactivity
explicitly with RxJS, this is a form of explicit reactivity.
Default Angular Reactivity
Transparent Reactivity:
The programmer should be
able to use ideomatic
JavaScript, the Framework
does the rest.
Strength Weakness
Zone.js: Patching the browser is
problematic on many levels.
Brute-force approach of default
change detection is not optimal in
regard to performance.
Change Detection imposes
constraints ...
- avoid setter/getters
- unidirectional data-flow
- avoid async/await
"Simulated Reactivity"
Unidirectional Data Flow
Angular enforces unidirectional data flow from top to
bottom of the component tree.
• A child is not allowed to change the state of the parent once
the parent changes have been processed.
• This prevents cycles in the change detection.
(to prevent inconsistencies between state and ui and for better
performance)
• In development mode Angular performs a check (a second
change detection) to ensure that the component tree has
not changed after change detection. If there are changes it
throws a
ExpressionChangedAfterItHasBeenCheckedError.
https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/
(Missing?) Reactivity in React
Function Components
function	AppComponent(props)	{	
return	(	
				<div>	
								<h1>{props.title}</h1>	
								<p>{props.message}</p>	
				</div>	
);	
}
properties
A components is a plain JavaScript function.
UI
(DOM ... )
The function is called each time the UI is
renedered (i.e. with every data-change)
A component transforms JavaScript state into the DOM structure:
UI = f(state)
import	React,	{	useEffect,	useState	}	from	'react';	
export	function	Counter()	{	
				const	[count,	setCount]	=	useState(0);	
				useEffect(()	=>	{	
								setInterval(()	=>	{	
												setCount(count	=>	count	+	1);	
								},	1000)	
				},	[]);	
				return	<div>{count}</div>	
}
React is used
to manage the
state
Reactivity in React
UI = f(state) triggered by
the programmer
setInterval(()	=>	
1000);
Programmer to React:
"Please change the state for me ... "
apply minimal changes.
DOM
setCount(count	=>	count	+	1),
State
count:	42
update the state
<div>42</div>
trigger re-renderingvirtual
DOM
From User Action to Framework Reaction
React Reactivity
Functional Mindset:
- Rendering is a side-effect
of state changes.
- Components transform
state to ui.
Strength Weakness
"Render everything approach" is
wasteful.
State is managed by React: we
have to use the APIs and concepts
of React.
"Everything is rendered on every state change"
Reactive State in Vue
import	{	reactive,	watch	}	from	'vue'	
const	state	=	reactive({	
		count:	0	
})	
watch(()	=>	{	
		document.body.innerHTML	=	`count	is	${state.count}`	
})	
setInterval(()	=>	state.count++,	1000);
The example is using the composition API of upcoming vue 3:
https://vue-composition-api-rfc.netlify.com/
This is available inVue 2: https://github.com/vuejs/composition-api
changing state triggers re-rendering
Reactivity inVue
UI = f(state) triggered by
reactive state
setInterval(	
()	=>	state.count++,	
1000);
apply minimal changes.
DOM
State (Vue proxy)
{	count:	42	}
<div>42</div>
trigger re-rendering
get/set	count()
increase
ChangeTracking & Reactive State
https://vuejs.org/v2/guide/reactivity.html
Vue Reactivity
"True Reactivity":The state
can be observed.
Strength Weakness
State is not "plain" JavaScript, which
comes with its own limitations.
"Reactive State"
Alternatives &Variations
Zone.js
Change	
Detection
OnPush
Observables
Zone-Less
Angular Reactivity Options
Observables & async Pipe
UI$ = f(state$)
UI = f(state)
Reactivity realized with Streams
Triggered by Zone.js
"streams: true reactive programming"
"simulated reactivity"
Computed State
Anything that can be derived from the
application state, should be derived.
Automatically.
- MobX Introduction
No ideomatic
solution:
- getters/setters
- ngOnChanges
- Pure Pipe
- Observables
- (NgRx)
Derived state is
calculated during
rendering.
Optmization
with
Memoization.
Computed
properties.
State outside Components
Application-
State
Component
Tree
change
render
Application
A state container extracts the shared state out of the
components, and manages it in a global singleton.
The component tree becomes a big "view", any
component can access the state or trigger changes, no
matter where they are in the tree!
store
Code: https://github.com/jbandi/framework-reactivity
Have Fun with the
Framework of your Choice!
Twitter: @jbandi
Resources
• TheTaxonomy of Reactive Programming
https://vsavkin.com/the-taxonomy-of-reactive-programming-d40e2e23dee4
• Front end development and change detection (Angular vs. React):
https://www.youtube.com/watch?v=1i8klHov3vA
• JS Roundabout, Reactivity in React andVue, February 2018
https://www.youtube.com/watch?v=HWZq_rlJU4o
• Why React Is *Not* Reactive - Shawn Wang @ ReactNYC
https://www.youtube.com/watch?v=ZZoB5frlcnE
• Shift Dev 2019: "Rethinking Reactivity" - Rich Harris (NewYorkTimes)
https://www.youtube.com/watch?v=gJ2P6hGwcgo
• The Return of 'Write Less, Do More' by Rich Harris | JSCAMP 2019
https://www.youtube.com/watch?v=BzX4aTRPzno
• Reactivity:Vue 2 vsVue 3
https://www.vuemastery.com/blog/Reactivity-Vue2-vs-Vue3/
Ad

More Related Content

What's hot (20)

AngularJs presentation
AngularJs presentation AngularJs presentation
AngularJs presentation
Phan Tuan
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
Wei Ru
 
Overview of the AngularJS framework
Overview of the AngularJS framework Overview of the AngularJS framework
Overview of the AngularJS framework
Yakov Fain
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
Ran Wahle
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
Yakov Fain
 
Implementing Data Visualization Apps on iOS Devices
Implementing Data Visualization Apps on iOS DevicesImplementing Data Visualization Apps on iOS Devices
Implementing Data Visualization Apps on iOS Devices
Douglass Turner
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue Solutions
RapidValue
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - Services
Nir Kaufman
 
Introduction to Google Guice
Introduction to Google GuiceIntroduction to Google Guice
Introduction to Google Guice
Knoldus Inc.
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
Volodymyr Voytyshyn
 
AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014AngularJS - TechTalk 3/2/2014
AngularJS - TechTalk 3/2/2014
Spyros Ioakeimidis
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversing
Enrique López Mañas
 
Angular2 for Beginners
Angular2 for BeginnersAngular2 for Beginners
Angular2 for Beginners
Oswald Campesato
 
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Codemotion
 
Introduction to Unit Tests and TDD
Introduction to Unit Tests and TDDIntroduction to Unit Tests and TDD
Introduction to Unit Tests and TDD
Betclic Everest Group Tech Team
 
Using hilt in a modularized project
Using hilt in a modularized projectUsing hilt in a modularized project
Using hilt in a modularized project
Fabio Collini
 
AngularJs
AngularJsAngularJs
AngularJs
syam kumar kk
 
AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?
Alessandro Giorgetti
 
Google Guice
Google GuiceGoogle Guice
Google Guice
Andriy Andrunevchyn
 
Web polyglot programming
Web polyglot programmingWeb polyglot programming
Web polyglot programming
Dmitry Buzdin
 
AngularJs presentation
AngularJs presentation AngularJs presentation
AngularJs presentation
Phan Tuan
 
Practical AngularJS
Practical AngularJSPractical AngularJS
Practical AngularJS
Wei Ru
 
Overview of the AngularJS framework
Overview of the AngularJS framework Overview of the AngularJS framework
Overview of the AngularJS framework
Yakov Fain
 
AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014AngularJs Workshop SDP December 28th 2014
AngularJs Workshop SDP December 28th 2014
Ran Wahle
 
Angular2 Development for Java developers
Angular2 Development for Java developersAngular2 Development for Java developers
Angular2 Development for Java developers
Yakov Fain
 
Implementing Data Visualization Apps on iOS Devices
Implementing Data Visualization Apps on iOS DevicesImplementing Data Visualization Apps on iOS Devices
Implementing Data Visualization Apps on iOS Devices
Douglass Turner
 
AngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue SolutionsAngularJS Project Setup step-by- step guide - RapidValue Solutions
AngularJS Project Setup step-by- step guide - RapidValue Solutions
RapidValue
 
AngularJS - Services
AngularJS - ServicesAngularJS - Services
AngularJS - Services
Nir Kaufman
 
Introduction to Google Guice
Introduction to Google GuiceIntroduction to Google Guice
Introduction to Google Guice
Knoldus Inc.
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
Volodymyr Voytyshyn
 
Android Building, Testing and reversing
Android Building, Testing and reversingAndroid Building, Testing and reversing
Android Building, Testing and reversing
Enrique López Mañas
 
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Universal JavaScript Web Applications with React - Luciano Mammino - Codemoti...
Codemotion
 
Using hilt in a modularized project
Using hilt in a modularized projectUsing hilt in a modularized project
Using hilt in a modularized project
Fabio Collini
 
AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?AngularConf2016 - A leap of faith !?
AngularConf2016 - A leap of faith !?
Alessandro Giorgetti
 
Web polyglot programming
Web polyglot programmingWeb polyglot programming
Web polyglot programming
Dmitry Buzdin
 

Similar to From User Action to Framework Reaction (20)

From User Action to Framework Reaction
From User Action to Framework ReactionFrom User Action to Framework Reaction
From User Action to Framework Reaction
jbandi
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Preview
valuebound
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
Chiew Carol
 
React gsg presentation with ryan jung &amp; elias malik
React   gsg presentation with ryan jung &amp; elias malikReact   gsg presentation with ryan jung &amp; elias malik
React gsg presentation with ryan jung &amp; elias malik
Lama K Banna
 
FRONTEND DEVELOPMENT WITH REACT.JS
FRONTEND DEVELOPMENT WITH REACT.JSFRONTEND DEVELOPMENT WITH REACT.JS
FRONTEND DEVELOPMENT WITH REACT.JS
IRJET Journal
 
React vs angular (mobile first battle)
React vs angular (mobile first battle)React vs angular (mobile first battle)
React vs angular (mobile first battle)
Michael Haberman
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Again
jonknapp
 
Angular Seminar-js
Angular Seminar-jsAngular Seminar-js
Angular Seminar-js
Mindfire Solutions
 
Introduction to React JS
Introduction to React JSIntroduction to React JS
Introduction to React JS
Bethmi Gunasekara
 
Reactive microservices with eclipse vert.x
Reactive microservices with eclipse vert.xReactive microservices with eclipse vert.x
Reactive microservices with eclipse vert.x
Ram Maddali
 
NGRX Apps in Depth
NGRX Apps in DepthNGRX Apps in Depth
NGRX Apps in Depth
Trayan Iliev
 
7 Redux challenges
7 Redux challenges7 Redux challenges
7 Redux challenges
reactima
 
Reactive Programming on Android - RxAndroid - RxJava
Reactive Programming on Android - RxAndroid - RxJavaReactive Programming on Android - RxAndroid - RxJava
Reactive Programming on Android - RxAndroid - RxJava
Ali Muzaffar
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
Aayush Shrestha
 
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
Binary Studio
 
DZone_RC_RxJS
DZone_RC_RxJSDZone_RC_RxJS
DZone_RC_RxJS
Luis Atencio
 
React Native’s New Architecture Decoded: How to Migrate & Benefits?
React Native’s New Architecture Decoded: How to Migrate & Benefits? React Native’s New Architecture Decoded: How to Migrate & Benefits?
React Native’s New Architecture Decoded: How to Migrate & Benefits?
jhonmiller20
 
vinod kumar JAVA
vinod kumar JAVAvinod kumar JAVA
vinod kumar JAVA
Vinod Kumar
 
Intoduction to Angularjs
Intoduction to AngularjsIntoduction to Angularjs
Intoduction to Angularjs
Gaurav Agrawal
 
VenkateshVG
VenkateshVGVenkateshVG
VenkateshVG
Venkatesh Govindaraj
 
From User Action to Framework Reaction
From User Action to Framework ReactionFrom User Action to Framework Reaction
From User Action to Framework Reaction
jbandi
 
React JS: A Secret Preview
React JS: A Secret PreviewReact JS: A Secret Preview
React JS: A Secret Preview
valuebound
 
React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)React Native +Redux + ES6 (Updated)
React Native +Redux + ES6 (Updated)
Chiew Carol
 
React gsg presentation with ryan jung &amp; elias malik
React   gsg presentation with ryan jung &amp; elias malikReact   gsg presentation with ryan jung &amp; elias malik
React gsg presentation with ryan jung &amp; elias malik
Lama K Banna
 
FRONTEND DEVELOPMENT WITH REACT.JS
FRONTEND DEVELOPMENT WITH REACT.JSFRONTEND DEVELOPMENT WITH REACT.JS
FRONTEND DEVELOPMENT WITH REACT.JS
IRJET Journal
 
React vs angular (mobile first battle)
React vs angular (mobile first battle)React vs angular (mobile first battle)
React vs angular (mobile first battle)
Michael Haberman
 
From Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) AgainFrom Backbone to Ember and Back(bone) Again
From Backbone to Ember and Back(bone) Again
jonknapp
 
Reactive microservices with eclipse vert.x
Reactive microservices with eclipse vert.xReactive microservices with eclipse vert.x
Reactive microservices with eclipse vert.x
Ram Maddali
 
NGRX Apps in Depth
NGRX Apps in DepthNGRX Apps in Depth
NGRX Apps in Depth
Trayan Iliev
 
7 Redux challenges
7 Redux challenges7 Redux challenges
7 Redux challenges
reactima
 
Reactive Programming on Android - RxAndroid - RxJava
Reactive Programming on Android - RxAndroid - RxJavaReactive Programming on Android - RxAndroid - RxJava
Reactive Programming on Android - RxAndroid - RxJava
Ali Muzaffar
 
Understanding angular js
Understanding angular jsUnderstanding angular js
Understanding angular js
Aayush Shrestha
 
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
React vs Angular: ups & downs (speaker Oleksandr Kovalov, Binary Studio)
Binary Studio
 
React Native’s New Architecture Decoded: How to Migrate & Benefits?
React Native’s New Architecture Decoded: How to Migrate & Benefits? React Native’s New Architecture Decoded: How to Migrate & Benefits?
React Native’s New Architecture Decoded: How to Migrate & Benefits?
jhonmiller20
 
vinod kumar JAVA
vinod kumar JAVAvinod kumar JAVA
vinod kumar JAVA
Vinod Kumar
 
Intoduction to Angularjs
Intoduction to AngularjsIntoduction to Angularjs
Intoduction to Angularjs
Gaurav Agrawal
 
Ad

More from jbandi (11)

Angular 2: What's New?
Angular 2: What's New?Angular 2: What's New?
Angular 2: What's New?
jbandi
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015
jbandi
 
Java & JavaScript: Best Friends?
Java & JavaScript: Best Friends?Java & JavaScript: Best Friends?
Java & JavaScript: Best Friends?
jbandi
 
There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014
jbandi
 
Professional JavaScript Development (An Introduction for Java Developers)
Professional JavaScript Development (An Introduction for Java Developers)Professional JavaScript Development (An Introduction for Java Developers)
Professional JavaScript Development (An Introduction for Java Developers)
jbandi
 
vert.x - asynchronous event-driven web applications on the JVM
vert.x - asynchronous event-driven web applications on the JVMvert.x - asynchronous event-driven web applications on the JVM
vert.x - asynchronous event-driven web applications on the JVM
jbandi
 
Kann JavaScript elegant sein?
Kann JavaScript elegant sein?Kann JavaScript elegant sein?
Kann JavaScript elegant sein?
jbandi
 
NDC 2011 - Building .NET Applications with BDD
NDC 2011 - Building .NET Applications with BDDNDC 2011 - Building .NET Applications with BDD
NDC 2011 - Building .NET Applications with BDD
jbandi
 
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETNDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
jbandi
 
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
jbandi
 
Testing: Chances and Challenges in an agile World
Testing: Chances and Challenges in an agile WorldTesting: Chances and Challenges in an agile World
Testing: Chances and Challenges in an agile World
jbandi
 
Angular 2: What's New?
Angular 2: What's New?Angular 2: What's New?
Angular 2: What's New?
jbandi
 
The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015The curious Life of JavaScript - Talk at SI-SE 2015
The curious Life of JavaScript - Talk at SI-SE 2015
jbandi
 
Java & JavaScript: Best Friends?
Java & JavaScript: Best Friends?Java & JavaScript: Best Friends?
Java & JavaScript: Best Friends?
jbandi
 
There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014There is something about JavaScript - Choose Forum 2014
There is something about JavaScript - Choose Forum 2014
jbandi
 
Professional JavaScript Development (An Introduction for Java Developers)
Professional JavaScript Development (An Introduction for Java Developers)Professional JavaScript Development (An Introduction for Java Developers)
Professional JavaScript Development (An Introduction for Java Developers)
jbandi
 
vert.x - asynchronous event-driven web applications on the JVM
vert.x - asynchronous event-driven web applications on the JVMvert.x - asynchronous event-driven web applications on the JVM
vert.x - asynchronous event-driven web applications on the JVM
jbandi
 
Kann JavaScript elegant sein?
Kann JavaScript elegant sein?Kann JavaScript elegant sein?
Kann JavaScript elegant sein?
jbandi
 
NDC 2011 - Building .NET Applications with BDD
NDC 2011 - Building .NET Applications with BDDNDC 2011 - Building .NET Applications with BDD
NDC 2011 - Building .NET Applications with BDD
jbandi
 
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NETNDC 2011 - SpecFlow: Pragmatic BDD for .NET
NDC 2011 - SpecFlow: Pragmatic BDD for .NET
jbandi
 
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
Testing Heute: ein Relikt aus dem Zeitalter des goldenen Wasserfalls?
jbandi
 
Testing: Chances and Challenges in an agile World
Testing: Chances and Challenges in an agile WorldTesting: Chances and Challenges in an agile World
Testing: Chances and Challenges in an agile World
jbandi
 
Ad

Recently uploaded (20)

Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
Datastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptxDatastucture-Unit 4-Linked List Presentation.pptx
Datastucture-Unit 4-Linked List Presentation.pptx
kaleeswaric3
 
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
#AdminHour presents: Hour of Code2018 slide deck from 12/6/2018
Lynda Kane
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Mobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi ArabiaMobile App Development Company in Saudi Arabia
Mobile App Development Company in Saudi Arabia
Steve Jonas
 
Rock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning JourneyRock, Paper, Scissors: An Apex Map Learning Journey
Rock, Paper, Scissors: An Apex Map Learning Journey
Lynda Kane
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Salesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docxSalesforce AI Associate 2 of 2 Certification.docx
Salesforce AI Associate 2 of 2 Certification.docx
José Enrique López Rivera
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 

From User Action to Framework Reaction

  • 1. From User Action to Framework Reaction Reactivity in modern Frontend Frameworks
  • 2. Jonas Bandi [email protected] Twitter: @jbandi - Freelancer, in den letzten 6 Jahren vor allem in Projekten im Spannungsfeld zwischen modernen Webentwicklung und traditionellen Geschäftsanwendungen. - Dozent an der Berner Fachhochschule seit 2007 - In-House Kurse:Web-Technologien im Enterprise UBS, Postfinance, Mobiliar, SBB, BIT, BSI, Elca ... JavaScript / Angular / React / Vue.js Schulung / Beratung / Coaching / Reviews [email protected] http://ivorycode.com/#schulung
  • 3. Agenda Intro Baseline: "Out of the Box"-Reactivity of , and (Slides and Demos) Further Explorations: Demos and Code Explorations https://github.com/jbandi/framework-reactivity
  • 5. Reactive Programming? In computing, reactive programming is a declarative programming paradigm concerned with data streams and the propagation of change. - Wikipedia Reactive programming is programming with asynchronous data streams. Andre Staltz The introduction to Reactive Programming you've been missing https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 click$ .pipe(scan(count => count + 1, 0)) .subscribe(count => console.log(`Clicked ${count} times`));
  • 7. In the Beginning there was Darkness ...
  • 8. ... then the DOM was created.
  • 9. ... and we manipulated the DOM ... $(".menu-item") .removeClass("active") .addClass("inactive ") .css("padding-left", "0px") .find(".trigger") .click(function(ev) { // spaghetti carbonara? }) .each(function () { // spaghetti napoli? });
  • 10. ... the Dark Ages of DOM ...
  • 11. ... a new hope ...
  • 14. Thou shalt not manipulate the DOM!
  • 15. the DOM *is* updated
  • 16. State is Managed in JavaScript Action: change state Reaction: re-render Dom Ajax Timeout ... User trigger State Reactivity:The framework reacts on state changes and updates the UI. DOM UI EvanYou - Reactivity in Frontend JavaScript Frameworks: https://www.youtube.com/watch?v=r4pNEdIt_l4 http://teropa.info/blog/2015/03/02/change-and-its-detection-in-javascript-frameworks.html
  • 17. Reactivity:What and Why? Traditional "DOM-centric" applications UI = state Browsers have "built-in" reactivity: If the DOM is changed, the UI is re-rendered. UI = f(state) With modern SPA architectures (MVC, MVP, Components …) the client state is represented as JavaScript objects. The UI that you can see and manipulate on screen is the result of painting a visual representation of data. Reactive programming in general addresses the question: How to deal with change over time? The UI should (automatically) re-render when the state changes. When to call? https://blog.danlew.net/2017/07/27/an-introduction-to-functional-reactive-programming/
  • 22. Zone.js: The "Magic" in Angular Change Detection Zone.js is a JavaScript library provided by the Angular project that patches many asynchronous browser APIs. Listeners can then be triggered when these APIs are executed. Angular relies on Zone.js to trigger automatic change detection. Angular is running inside the NgZone (a zone created via Zone.js).When async APIs are executed Angular gets notified when the execution has finished and triggers change detection. https://github.com/angular/zone.js/ https://medium.com/better-programming/zone-js-for-angular-devs-573d89bbb890 Patched APIs (examples): setTimeout, Promise, XMLHttpRequest, prompt and DOM events. More details: https://github.com/angular/angular/blob/master/packages/zone.js/STANDARD-APIS.md
  • 23. Default Reactivity in Angular UI = f(state) Triggered by Zone.js "simulated reactivity" setInterval( 1000); Zone.js "Zone to Angular": Hey, there might be something going on ... apply minimal changes. DOM () => this.count++ State count: 42 let's check everything ... increase <div>42</div> change detection "simulated reactivity"
  • 24. Default Change Detection As default Angular detects changes by inspecting the state of all components every time change detection is triggered. Component Component Component Component Component event trigger change detection on app propagate change detection to children propagate change detection to children CD CD CD CD CD Change detection is always triggered at the top of the component hirarchy and propagates down to each child. Every value used in a template is inspected and compared to the previous value. Zone.js Checking all components on every possible event can be performance intense.
  • 25. Default Reactivity in Angular Zone.js with Default Change Detection: • are a form of simulated reactivity: the framework does not react to changes but to events that might potentially resulted in changes • are a form of transparent reactivity: It makes reactivity an implicit characteristic of your program. TheTaxonomy of Reactive Programming: https://vsavkin.com/the-taxonomy-of-reactive-programming-d40e2e23dee4 https://github.com/meteor/docs/blob/version-NEXT/long-form/tracker-manual.md A common alternative in Angular is to model Reactivity explicitly with RxJS, this is a form of explicit reactivity.
  • 26. Default Angular Reactivity Transparent Reactivity: The programmer should be able to use ideomatic JavaScript, the Framework does the rest. Strength Weakness Zone.js: Patching the browser is problematic on many levels. Brute-force approach of default change detection is not optimal in regard to performance. Change Detection imposes constraints ... - avoid setter/getters - unidirectional data-flow - avoid async/await "Simulated Reactivity"
  • 27. Unidirectional Data Flow Angular enforces unidirectional data flow from top to bottom of the component tree. • A child is not allowed to change the state of the parent once the parent changes have been processed. • This prevents cycles in the change detection. (to prevent inconsistencies between state and ui and for better performance) • In development mode Angular performs a check (a second change detection) to ensure that the component tree has not changed after change detection. If there are changes it throws a ExpressionChangedAfterItHasBeenCheckedError. https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/
  • 29. Function Components function AppComponent(props) { return ( <div> <h1>{props.title}</h1> <p>{props.message}</p> </div> ); } properties A components is a plain JavaScript function. UI (DOM ... ) The function is called each time the UI is renedered (i.e. with every data-change) A component transforms JavaScript state into the DOM structure: UI = f(state)
  • 31. Reactivity in React UI = f(state) triggered by the programmer setInterval(() => 1000); Programmer to React: "Please change the state for me ... " apply minimal changes. DOM setCount(count => count + 1), State count: 42 update the state <div>42</div> trigger re-renderingvirtual DOM
  • 33. React Reactivity Functional Mindset: - Rendering is a side-effect of state changes. - Components transform state to ui. Strength Weakness "Render everything approach" is wasteful. State is managed by React: we have to use the APIs and concepts of React. "Everything is rendered on every state change"
  • 35. import { reactive, watch } from 'vue' const state = reactive({ count: 0 }) watch(() => { document.body.innerHTML = `count is ${state.count}` }) setInterval(() => state.count++, 1000); The example is using the composition API of upcoming vue 3: https://vue-composition-api-rfc.netlify.com/ This is available inVue 2: https://github.com/vuejs/composition-api changing state triggers re-rendering
  • 36. Reactivity inVue UI = f(state) triggered by reactive state setInterval( () => state.count++, 1000); apply minimal changes. DOM State (Vue proxy) { count: 42 } <div>42</div> trigger re-rendering get/set count() increase
  • 37. ChangeTracking & Reactive State https://vuejs.org/v2/guide/reactivity.html
  • 38. Vue Reactivity "True Reactivity":The state can be observed. Strength Weakness State is not "plain" JavaScript, which comes with its own limitations. "Reactive State"
  • 41. Observables & async Pipe UI$ = f(state$) UI = f(state) Reactivity realized with Streams Triggered by Zone.js "streams: true reactive programming" "simulated reactivity"
  • 42. Computed State Anything that can be derived from the application state, should be derived. Automatically. - MobX Introduction No ideomatic solution: - getters/setters - ngOnChanges - Pure Pipe - Observables - (NgRx) Derived state is calculated during rendering. Optmization with Memoization. Computed properties.
  • 43. State outside Components Application- State Component Tree change render Application A state container extracts the shared state out of the components, and manages it in a global singleton. The component tree becomes a big "view", any component can access the state or trigger changes, no matter where they are in the tree! store
  • 45. Resources • TheTaxonomy of Reactive Programming https://vsavkin.com/the-taxonomy-of-reactive-programming-d40e2e23dee4 • Front end development and change detection (Angular vs. React): https://www.youtube.com/watch?v=1i8klHov3vA • JS Roundabout, Reactivity in React andVue, February 2018 https://www.youtube.com/watch?v=HWZq_rlJU4o • Why React Is *Not* Reactive - Shawn Wang @ ReactNYC https://www.youtube.com/watch?v=ZZoB5frlcnE • Shift Dev 2019: "Rethinking Reactivity" - Rich Harris (NewYorkTimes) https://www.youtube.com/watch?v=gJ2P6hGwcgo • The Return of 'Write Less, Do More' by Rich Harris | JSCAMP 2019 https://www.youtube.com/watch?v=BzX4aTRPzno • Reactivity:Vue 2 vsVue 3 https://www.vuemastery.com/blog/Reactivity-Vue2-vs-Vue3/