SlideShare ist ein Scribd-Unternehmen logo
1 von 108
Downloaden Sie, um offline zu lesen
Boris Dinkevich boris@500tech.com
REACTJS
And how it works
How it all started…
Boris Dinkevich
- 4 years Dev Ops
- 4 years Embedded C
- 4 years Ruby on Rails
- 4 years JavaScript (Angular/React)
Developing stuff
Boris Dinkevich
- AngularJS Israel (4K ppl)
- ReactJS Israel (2K ppl)
- Angular UP
- React Next
- React Courses
These days
- Frontend Projects
- Consulting
- Courses / Training
- Fun!
A WORD ON TREES
NEW CHAPTER
[DELETE THIS]: Chapter name should be ALL CAPS
Please think twice before adding a chapter slide,
most chances you won’t need it.
Our code today
const Todos = () => (

<ul>

<li>Todo</li>

</ul>

);

De-JSX
const Todos = () => (

<ul>

<li>Stuff</li>

</ul>

);

const Todos = () => (

React.createElement("ul", null,

React.createElement("li", null,

"Stuff"

),

);

);
Calling Todo()
“Stuff”
“li”
“ul”
props.children
props.children
Chrome dev tools?
Chrome dev tools?
Chrome dev tools?
AMOUNT OF MAGIC SO FAR?
0%
WHY REACT?
DOM is slow
Lets minimise writes…
Our Sample App
Todos
Header
TodoTodo
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“One”
“li”
Old New
App
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“One”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Our tree Our DOM
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Our tree Our DOM
App
Tree & DOM
Todos
Header
“div”
“Welcome”
“h1”
“div”
Todo
“Two”
“li”
“ul”
Todo
“Million”
“li”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“Million”
“li”
Our tree Our DOM
App
The code?
const updateNode = (treeNode, dom) => {
if (treeNode.type !== dom.type) {
// Delete the dom element
// Create a new dom element
} else {
const styles = dom.getStyle();
const attrs = dom.getAttrs();
const listeners = dom.getListeners();
readAndUpdateStyles(treeNode, dom);
readAndUpdateAttrs(treeNode, dom);
readAndUpdateEventListeners(treeNode, dom);
}
};
Introducing
BORIS JS
1. Call render() to build tree new tree
2. Compare each element to the real DOM
3. Update class/attrs/events when needed
4. Win!
Base code
React docs: “reads are slow”
Lets open PR
Simple diff
const testAndUpdateInnerText = (node, value) => {

if (node.innerText !== value) {

node.innerText = value;

}


}

60fps
Time per frame: 16.6ms
Time for 1000 read / write cycles: 36.15ms
Read
Write
Read & Write
Hmmm….
const updateNode = (elem, value) => {
const prev = elem.innerText;
if (prev !== value) {
dom.innerText = value;
};
};
// Mark DOM Dirty
// Is DOM Dirty? Update and get value
Hmmm….
// Is DOM Dirty? Update and get value1.If DOM not ready - rebuild
2.Get updated value
3.Update value
4.Make DOM dirty
1000x
Hmmm….
// Is DOM Dirty? Update and get value1.If DOM not ready - rebuild
2.Get updated values into array - 1000x
3.Update values from array - 1000x
4.Make DOM dirty
1x
Introducing
BORISJS 2.0
Updated
1.Call render() to build tree
2.Read DOM into “temp tree”
3.Compare each element to temp tree
4.Change when needed
5.Win!
“temp tree”… sounds familiar
But wait
1.Call render() to build tree
2.Read DOM into “temp tree”
3.Compare each element in DOM to temp tree
4.Change DOM when needed
5.Win!
Isn’t “temp tree” equal to DOM?
Pre cache
1. Call render() to build “next tree”
2. Compare each element to “prev tree”
3. Change DOM when needed
4.Save “next tree” as “prev tree”
5. Win!
What is “prev tree” the first time?
Introducing
BORISJS 3.0
Super duper algo
Initial Render
1.Call render() to build tree
2.Save as “prev tree”
3.Create initial DOM
Updates
1.Call render() to build “next tree”
2.Compare each element to “prev tree”
4.Change DOM when needed
5.Save “next tree” as “prev tree”
6.Win!
NO READS?
Todos.setState({ todos: [’XXXXX’, ‘Two’] });

Todos
• One
• Two
Todos
• XXXXX
• Two
todos = document.getElementById('app').children[0].children[1];

todos.removeChild(todos.childNodes[0]);
Todos.setState({ todos: [‘XXXXX’, ‘Dos’] });
Todos
• Dos
Todos
• One
• Two
Todos
• Two
<input />
In React
• Initial Render
• Updates
FIRST RUN
React.createElement(App);

Starting
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“One”
“li”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“One”
“li”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“One”
“li”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Mounting DOM
function
Todos()
function
Header()
“div”
“Welcome”
“h1”
“div”
function
Todo()
“Two”
“li”
“ul
function
Todo()
“One”
“li”
function
App()
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
Mounting DOM
“div”
“div”
“Welcome”
“h1”
“div”
“Two”
“li”
“ul”
“One”
“li”
#app
DOM
<body>

<div id="app"></div>

</body>

render(

React.createElement(App),

document.getElementById('app')

);
DOM IS READY!
Or is it?
DOM and React
Event Handers
<Component onClick={} />

Connection
React
onClick
DOM
React DOM
Our Code
Different renderers
DOM - onClick
Native - onPress
What does this mean?
<Header onClick={} />

<Header onPress={} />

What is “React”?
addons 1,334
isomorphic 3,428
shared 7,058
renderers/
art 641
dom 12,337
native 2,735
noop 192
shared 9,368
* lines of code in 15-stable
TREE UPDATE
What will cause React to render again?
• setState()
• forceUpdate()
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
Todos.setState({
todos: ['Uno', 'Dos']
});

function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“One”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“One”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Two”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Two”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
Flow
1. setState({ todos: [‘Uno’, ‘Dos’] });
2. Todos updated and rendering starts
3. Todo1 needs update
4. DOM updated
5. Todo2 needs update
6. DOM updated
AGAIN?
Todos.setState({
todos: ['Uno', 'Dos']
});

function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
shouldComponentUpdate
Why?
class Todo extends React.Component {

shouldComponentUpdate(nextProps) {

return
nextProps.title !== this.props.title;

}



render() {

return (

<li>{ this.props.title }</li>

)

}

}
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
“div”
“Dos”
“li”
“ul”
“Uno”
“li”
DOMReact Tree prev Virtual DOM
‘UNO’ ‘DOS’
LIFE CYCLE
function
Todos()
“div”
function
Todo()
{ title }
“li”
“ul”
function
Todo()
{ title }
“li”
function
App()
React Tree
componentWillMount
componentDidMount
componentWillUpdate
componentDidUpdate
componentWillUnmount
…
FINAL WORDS
REACT IS COMPLICATED
SO YOUR CODE DOES’T HAVE TO BE
http://redux-book.com
The Complete Redux Book
And read our blog:
http://blog.500tech.com
Don’t <React />, Plan!

Weitere ähnliche Inhalte

Was ist angesagt?

FleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in ClojureFleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in Clojure
elliando dias
 
A million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scaleA million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scale
Tom Croucher
 
Lille2010markp
Lille2010markpLille2010markp
Lille2010markp
Ch'ti JUG
 

Was ist angesagt? (20)

Painless Persistence with Realm
Painless Persistence with RealmPainless Persistence with Realm
Painless Persistence with Realm
 
Realm: Building a mobile database
Realm: Building a mobile databaseRealm: Building a mobile database
Realm: Building a mobile database
 
FleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in ClojureFleetDB A Schema-Free Database in Clojure
FleetDB A Schema-Free Database in Clojure
 
Painless Persistence in a Disconnected World
Painless Persistence in a Disconnected WorldPainless Persistence in a Disconnected World
Painless Persistence in a Disconnected World
 
Realm - Phoenix Mobile Festival
Realm - Phoenix Mobile FestivalRealm - Phoenix Mobile Festival
Realm - Phoenix Mobile Festival
 
A million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scaleA million connections and beyond - Node.js at scale
A million connections and beyond - Node.js at scale
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
Lille2010markp
Lille2010markpLille2010markp
Lille2010markp
 
Playing With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.jsPlaying With Fire - An Introduction to Node.js
Playing With Fire - An Introduction to Node.js
 
HTML5 JavaScript APIs
HTML5 JavaScript APIsHTML5 JavaScript APIs
HTML5 JavaScript APIs
 
Introduction to Nodejs
Introduction to NodejsIntroduction to Nodejs
Introduction to Nodejs
 
Promise pattern
Promise patternPromise pattern
Promise pattern
 
Practical PHP 5.3
Practical PHP 5.3Practical PHP 5.3
Practical PHP 5.3
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
Javascript Promises/Q Library
Javascript Promises/Q LibraryJavascript Promises/Q Library
Javascript Promises/Q Library
 
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on RailsSEMAC 2011 - Apresentando Ruby e Ruby on Rails
SEMAC 2011 - Apresentando Ruby e Ruby on Rails
 
Web Crawling with NodeJS
Web Crawling with NodeJSWeb Crawling with NodeJS
Web Crawling with NodeJS
 
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
apidays LIVE Australia 2020 - Building distributed systems on the shoulders o...
 

Ähnlich wie From render() to DOM

Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
Alex Bilbie
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
guileen
 

Ähnlich wie From render() to DOM (20)

The Ring programming language version 1.5.4 book - Part 15 of 185
The Ring programming language version 1.5.4 book - Part 15 of 185The Ring programming language version 1.5.4 book - Part 15 of 185
The Ring programming language version 1.5.4 book - Part 15 of 185
 
The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.10 book - Part 22 of 212The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.10 book - Part 22 of 212
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Android Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyondAndroid Jetpack + Coroutines: To infinity and beyond
Android Jetpack + Coroutines: To infinity and beyond
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
The Ring programming language version 1.5.2 book - Part 14 of 181
The Ring programming language version 1.5.2 book - Part 14 of 181The Ring programming language version 1.5.2 book - Part 14 of 181
The Ring programming language version 1.5.2 book - Part 14 of 181
 
Object Oriented Views / Aki Salmi
Object Oriented Views / Aki SalmiObject Oriented Views / Aki Salmi
Object Oriented Views / Aki Salmi
 
Why Nodejs Guilin Shanghai
Why Nodejs Guilin ShanghaiWhy Nodejs Guilin Shanghai
Why Nodejs Guilin Shanghai
 
Why Node.js
Why Node.jsWhy Node.js
Why Node.js
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
The Ring programming language version 1.10 book - Part 102 of 212
The Ring programming language version 1.10 book - Part 102 of 212The Ring programming language version 1.10 book - Part 102 of 212
The Ring programming language version 1.10 book - Part 102 of 212
 
The Ring programming language version 1.9 book - Part 21 of 210
The Ring programming language version 1.9 book - Part 21 of 210The Ring programming language version 1.9 book - Part 21 of 210
The Ring programming language version 1.9 book - Part 21 of 210
 
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31
 
Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?Dependency Injection Why is it awesome and Why should I care?
Dependency Injection Why is it awesome and Why should I care?
 
Web Components With Rails
Web Components With RailsWeb Components With Rails
Web Components With Rails
 
Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?Dependency Injection: Why is awesome and why should I care?
Dependency Injection: Why is awesome and why should I care?
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Headless drupal + react js Oleksandr Linyvyi
Headless drupal + react js   Oleksandr LinyvyiHeadless drupal + react js   Oleksandr Linyvyi
Headless drupal + react js Oleksandr Linyvyi
 
The Ring programming language version 1.8 book - Part 19 of 202
The Ring programming language version 1.8 book - Part 19 of 202The Ring programming language version 1.8 book - Part 19 of 202
The Ring programming language version 1.8 book - Part 19 of 202
 
compose_speaker_session.pdf
compose_speaker_session.pdfcompose_speaker_session.pdf
compose_speaker_session.pdf
 

Mehr von Boris Dinkevich (6)

Advanced redux
Advanced reduxAdvanced redux
Advanced redux
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Introduction to ReactJS and Redux
Introduction to ReactJS and ReduxIntroduction to ReactJS and Redux
Introduction to ReactJS and Redux
 
Introduction to React & Redux
Introduction to React & ReduxIntroduction to React & Redux
Introduction to React & Redux
 
Using ReactJS in AngularJS
Using ReactJS in AngularJSUsing ReactJS in AngularJS
Using ReactJS in AngularJS
 
Why ruby on rails
Why ruby on railsWhy ruby on rails
Why ruby on rails
 

Kürzlich hochgeladen

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Kürzlich hochgeladen (20)

Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

From render() to DOM