SlideShare a Scribd company logo
1 of 31
Download to read offline
ReactJS / FLUX
Responsive web with DDD and event-driven design.
Format
• ~1 hour talk
• ReactJS
• Facebook FLUX
• Isomorphic Web Apps
• Questions any time.
• Will show code.
• Open discussion afterwards
User Interface
• Ubiquitous language revolves around components.
• Components are focused and reusable.
• Our UI is composed from these components.
• Finding component boundaries is very similar to
DDDesign process.
UI Behaviors
• Ubiquitous Language revolves around events.
• Events can originate from user interactions
(TaskChecked) or from environment
(FailedToSaveTaskToServer).
• Multiple components could react in response to a
single Event.
Apply DDD to UI and compose it from reusable
visual components aligned with the domain.
Capture UI interactions as functional event-
driven behaviors.
ReactJS
JS library from Facebook with ONE magical feature
Simple Component
var TodoList = React.createClass({
render: function() {
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});

// ul and li are components, too
–ReactJS
“Don’t mutate UI! Re-render entire UI to Virtual
DOM on every change!”
ReactJS Summary
• Decompose UI into reusable components which
render to virtual DOM.
• ReactJS will sync VDOM to real browser DOM.
• JSX format is an optional syntactic sugar.
• ReactJS components encapsulate layout and
behavior in one file.
• Can render on client and server.
UI Composition
AppPage

LeftNavBar

AgendaNavItem

InboxNavItem

StarredNavItem

MainViewArea

InboxView

TaskList

TaskItem

TaskCheck

TaskStar

TaskItem

TaskItem

TaskComposer
— owns state

— pure

— pure

— pure

— pure

— pure

— owns state

— pure

— pure

— pure

— pure

— pure

— pure

— owns state
Pure Component
var TodoList = React.createClass({
render: function() {
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});
State
var TodoApp = React.createClass({
getInitialState: function() {
return {items: [], text: ''};
},
onChange: function(e) {
this.setState({text: e.target.value});
},
handleSubmit: function(e) {
e.preventDefault();
var nextItems = this.state.items.concat([this.state.text]);
var nextText = '';
this.setState({items: nextItems, text: nextText});
},
render: function() {
return (
<div>
<h3>TODO</h3>
<TodoList items={this.state.items} />
<form onSubmit={this.handleSubmit}>
<input onChange={this.onChange} value={this.state.text} />
<button>{'Add #' + (this.state.items.length + 1)}</button>
</form>
</div>
);
}
});
Questions?
Re: ReactJS and UI composition
Pure ReactJS example
// show abdullin.com - static site generated with ReactJS
Facebook FLUX
Event-driven pattern for client-side web applications
Facebook FLUX
• Similar to CQRS
• Compliments ReactJS
• Unidirectional data flow (data flows one-way, unlike
MVC but like CQRS)
• This presentation has 3 diffs from “official” Flux
Essentials
• React components bind to stores, render UI and
invoke Event Creators.
• Event Creators are thin (mostly talk to the API).
• All events go through the dispatcher.
• Stores subscribe to events and hold behaviors.
Tackling Complexity
• Keep ReactJS components thin and focused.
• All behaviors are event-driven.
• All logic is in the stores (we know how to design and
test them).
• The only way to change something in the stores
(and in the UI) is by publishing an event (no setters)
• console.log
Questions?
Sample Showtime
// Show GTD App
Diffs from FLUX
• “Action”(original) -> “Event”
• “Action Creator” (original) -> “Event Creator”
• Declarative Store Subscriptions (Yahoo Fluxible)
Isomorphic Web
Don’t do it, unless justified
Isomorphic Web Apps
• Can render on client and server.
• Very fast first page load (time-to-tweet).
• SEO-friendly.
• Server computes state and sends to client with pre-
generated HTML.
• Becomes client-side app after page was loaded.
Example: /agenda
1. Invoke event creators associated with route (all API calls
happen server-side).
2. Dispatch events to all subscribed stores in memory.
3. Render route page component in memory.
4. Send HTML to client, serialize and send store state in 1 batch.
5. Client displays HTML.
6. Client loads client-side scripts, wires components and
dehydrates the state.
Sample Showtime
// Show GTD App Sources
Questions?
@abdullin / http://abdullin.com
Rinat Abdullin
Rinat Abdullin is a software engineer who spent 10
years in .NET before deflecting to Linux. Along the
way he learned from awesome people, contributed to
the IDDD book, designed architecture of a social
website and helped to deliver big data analytics for
retail in the cloud.
Rinat helps teams to scale applications and deal with
complex legacy software. He shares his experience
in the blog at abdullin.com

More Related Content

Viewers also liked

Using ReactJS in AngularJS
Using ReactJS in AngularJSUsing ReactJS in AngularJS
Using ReactJS in AngularJSBoris Dinkevich
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Ryan Weaver
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesomeAndrew Hull
 
Component based models and technology
Component based models and technologyComponent based models and technology
Component based models and technologySaransh Garg
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing ComplexityRyan Anklam
 
React Native on Android
React Native on AndroidReact Native on Android
React Native on Android萬皇 楊
 
CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)Chih-cheng Wang
 
Javascript template & react js 初探
Javascript template & react js 初探Javascript template & react js 初探
Javascript template & react js 初探wantingj
 
Even more java script best practices
Even more java script best practicesEven more java script best practices
Even more java script best practicesChengHui Weng
 
Web Development best practices
Web Development best practicesWeb Development best practices
Web Development best practicesFadwa Gmiden
 
Introduction to JavaScript Programming
Introduction to JavaScript ProgrammingIntroduction to JavaScript Programming
Introduction to JavaScript ProgrammingRaveendra R
 
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5dashlinrockey
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackScott Persinger
 
Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Dan Dineen
 
Building Open-Source React Components
Building Open-Source React ComponentsBuilding Open-Source React Components
Building Open-Source React ComponentsZack Argyle
 

Viewers also liked (20)

Using ReactJS in AngularJS
Using ReactJS in AngularJSUsing ReactJS in AngularJS
Using ReactJS in AngularJS
 
Reactjs
Reactjs Reactjs
Reactjs
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
Component based models and technology
Component based models and technologyComponent based models and technology
Component based models and technology
 
React & The Art of Managing Complexity
React &  The Art of Managing ComplexityReact &  The Art of Managing Complexity
React & The Art of Managing Complexity
 
React Native on Android
React Native on AndroidReact Native on Android
React Native on Android
 
React, Flux and a little bit of Redux
React, Flux and a little bit of ReduxReact, Flux and a little bit of Redux
React, Flux and a little bit of Redux
 
CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)CSS 讀書會 - 1 (Grid system)
CSS 讀書會 - 1 (Grid system)
 
Javascript template & react js 初探
Javascript template & react js 初探Javascript template & react js 初探
Javascript template & react js 初探
 
Even more java script best practices
Even more java script best practicesEven more java script best practices
Even more java script best practices
 
Hugo - Introduction
Hugo - IntroductionHugo - Introduction
Hugo - Introduction
 
Web Development best practices
Web Development best practicesWeb Development best practices
Web Development best practices
 
Introduction to JavaScript Programming
Introduction to JavaScript ProgrammingIntroduction to JavaScript Programming
Introduction to JavaScript Programming
 
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
1335829820.8071 integrated%20hospital%20management%20system%20%5bihms%5d
 
Gcc
GccGcc
Gcc
 
Gcc opt
Gcc optGcc opt
Gcc opt
 
Full Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R StackFull Stack Toronto - the 3R Stack
Full Stack Toronto - the 3R Stack
 
Show & tell - Who is Hugo?
Show & tell - Who is Hugo?Show & tell - Who is Hugo?
Show & tell - Who is Hugo?
 
Building Open-Source React Components
Building Open-Source React ComponentsBuilding Open-Source React Components
Building Open-Source React Components
 

Recently uploaded

Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...OnePlan Solutions
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentationvaddepallysandeep122
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfIdiosysTechnologies1
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 

Recently uploaded (20)

Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
Tech Tuesday - Mastering Time Management Unlock the Power of OnePlan's Timesh...
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
PREDICTING RIVER WATER QUALITY ppt presentation
PREDICTING  RIVER  WATER QUALITY  ppt presentationPREDICTING  RIVER  WATER QUALITY  ppt presentation
PREDICTING RIVER WATER QUALITY ppt presentation
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Best Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdfBest Web Development Agency- Idiosys USA.pdf
Best Web Development Agency- Idiosys USA.pdf
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 

ReactJS / FLUX - Responsive web with DDD and event-driven design

  • 1. ReactJS / FLUX Responsive web with DDD and event-driven design.
  • 2. Format • ~1 hour talk • ReactJS • Facebook FLUX • Isomorphic Web Apps • Questions any time. • Will show code. • Open discussion afterwards
  • 3.
  • 4. User Interface • Ubiquitous language revolves around components. • Components are focused and reusable. • Our UI is composed from these components. • Finding component boundaries is very similar to DDDesign process.
  • 5. UI Behaviors • Ubiquitous Language revolves around events. • Events can originate from user interactions (TaskChecked) or from environment (FailedToSaveTaskToServer). • Multiple components could react in response to a single Event.
  • 6. Apply DDD to UI and compose it from reusable visual components aligned with the domain. Capture UI interactions as functional event- driven behaviors.
  • 7. ReactJS JS library from Facebook with ONE magical feature
  • 8. Simple Component var TodoList = React.createClass({ render: function() { var createItem = function(itemText) { return <li>{itemText}</li>; }; return <ul>{this.props.items.map(createItem)}</ul>; } });
 // ul and li are components, too
  • 9. –ReactJS “Don’t mutate UI! Re-render entire UI to Virtual DOM on every change!”
  • 10.
  • 11. ReactJS Summary • Decompose UI into reusable components which render to virtual DOM. • ReactJS will sync VDOM to real browser DOM. • JSX format is an optional syntactic sugar. • ReactJS components encapsulate layout and behavior in one file. • Can render on client and server.
  • 12. UI Composition AppPage
 LeftNavBar
 AgendaNavItem
 InboxNavItem
 StarredNavItem
 MainViewArea
 InboxView
 TaskList
 TaskItem
 TaskCheck
 TaskStar
 TaskItem
 TaskItem
 TaskComposer — owns state
 — pure
 — pure
 — pure
 — pure
 — pure
 — owns state
 — pure
 — pure
 — pure
 — pure
 — pure
 — pure
 — owns state
  • 13. Pure Component var TodoList = React.createClass({ render: function() { var createItem = function(itemText) { return <li>{itemText}</li>; }; return <ul>{this.props.items.map(createItem)}</ul>; } });
  • 14. State var TodoApp = React.createClass({ getInitialState: function() { return {items: [], text: ''}; }, onChange: function(e) { this.setState({text: e.target.value}); }, handleSubmit: function(e) { e.preventDefault(); var nextItems = this.state.items.concat([this.state.text]); var nextText = ''; this.setState({items: nextItems, text: nextText}); }, render: function() { return ( <div> <h3>TODO</h3> <TodoList items={this.state.items} /> <form onSubmit={this.handleSubmit}> <input onChange={this.onChange} value={this.state.text} /> <button>{'Add #' + (this.state.items.length + 1)}</button> </form> </div> ); } });
  • 15. Questions? Re: ReactJS and UI composition
  • 16. Pure ReactJS example // show abdullin.com - static site generated with ReactJS
  • 17. Facebook FLUX Event-driven pattern for client-side web applications
  • 18.
  • 19. Facebook FLUX • Similar to CQRS • Compliments ReactJS • Unidirectional data flow (data flows one-way, unlike MVC but like CQRS) • This presentation has 3 diffs from “official” Flux
  • 20.
  • 21. Essentials • React components bind to stores, render UI and invoke Event Creators. • Event Creators are thin (mostly talk to the API). • All events go through the dispatcher. • Stores subscribe to events and hold behaviors.
  • 22. Tackling Complexity • Keep ReactJS components thin and focused. • All behaviors are event-driven. • All logic is in the stores (we know how to design and test them). • The only way to change something in the stores (and in the UI) is by publishing an event (no setters) • console.log
  • 25. Diffs from FLUX • “Action”(original) -> “Event” • “Action Creator” (original) -> “Event Creator” • Declarative Store Subscriptions (Yahoo Fluxible)
  • 26. Isomorphic Web Don’t do it, unless justified
  • 27. Isomorphic Web Apps • Can render on client and server. • Very fast first page load (time-to-tweet). • SEO-friendly. • Server computes state and sends to client with pre- generated HTML. • Becomes client-side app after page was loaded.
  • 28. Example: /agenda 1. Invoke event creators associated with route (all API calls happen server-side). 2. Dispatch events to all subscribed stores in memory. 3. Render route page component in memory. 4. Send HTML to client, serialize and send store state in 1 batch. 5. Client displays HTML. 6. Client loads client-side scripts, wires components and dehydrates the state.
  • 29. Sample Showtime // Show GTD App Sources
  • 31. Rinat Abdullin Rinat Abdullin is a software engineer who spent 10 years in .NET before deflecting to Linux. Along the way he learned from awesome people, contributed to the IDDD book, designed architecture of a social website and helped to deliver big data analytics for retail in the cloud. Rinat helps teams to scale applications and deal with complex legacy software. He shares his experience in the blog at abdullin.com