React.js
And TweetDeck
Rethinking Best Practises
- Prequisite
- Combine DOM generation and display logic
- React's design
- Re-render the whole app on every update
- React's implementation
- Virtual DOM and synthetic events
Overarching Goal
Minimize Coupling and
maximize Cohesion
Coupling:
The degree to which each program module relies on each of the other modules.
Overarching Goal
Minimize Coupling and
mazimize Cohesion
Cohesion:
The degree to which elements of a module belong together.
Separation of Concerns?
Components and templates are tightly coupled.
DOM-manipulating mixins make it even worse.
Display logic and markup are
highly cohesive.
They both show the UI.
Templates separate technologies, not concerns.
I think behavior and structure are highly cohesive and always change together
— Pete Hunt (@floydophone) February 27, 2014
React components
Full power of JavaScript,
not a crippled template language.
not a crippled template language.
That's what it looks like
React.DOM.a(
{href: 'https://twitter.com/' + this.props.name},
'Follow @' + this.props.name
);
JSX
React.createClass({
render: function () {
return <a href={'https://twitter.com/' + this.props.name}>
Follow @{this.props.name}
</a>;
}
});
(This is completely optional.)
State
- State exists only in one place
- No DOM ↔ component mismatch
- State is immutable and shared
across dependent components - Data flows top to bottom
Vocabulary
-
Component
Instance of a React Class
Corresponds to a DOM node
WebComponent-like
Directive-ish
-
State
Held and managed by one component -
Props
Arguments passed to a component
HTML-attribute-y
Code!
OfflineDeck - Flight app, augmented with React components
ctlmngr - React from the ground up
Thanks.
React.js @ TweetDeck
By Pascal
React.js @ TweetDeck
- 1,776