A Ride with React
Mafinar Rashid Khan
Product Manager
Panacea Systems Limited
@mafinar
About Mafinar
- Fan of "The Flash"
- Makes finance systems, micro-frameworks, GIS
- Works with Python 2, Clojure[Script] and JavaScript, nowadays
- Can be sarcastic
- Knows (knew?!) Kung-fu
A JavaScript Library for building User Interfaces
...in a reason-about friendly way
Actually it's a way of thought, more like...
Functional Programming
JavaScript
So what do I cover here...???
And the list be like...
- The React Way of Thinking
- JSX
- Components and how the fit together
- Immutability
- Fluxing with NuclearJS
- Fun
But before this, let's talk about...
Vending Machines...
and now some math...
Remember f(x)?
i.e f(x) = 2*x + 1, what's f(1) kinda stuff??
What if f(x) returned HTML?
And your UI was composed of them?
So How do I do this???
Think Simple!!!
Look at this little guy...
Let's think about it...
Programming by Wishful Thoughts, friends...
Components
Immutability
Flux
Functional Programming
Take 1: <Components />
Turtles All the Way...
Title Text
var MyComponent = React.createClass({
propTypes: {
children: React.PropTypes.element.isRequired
},
render: function() {
return (
<div>
{this.props.children} // This must be exactly one element or it will throw.
</div>
);
}
});
Was that HTML in JS?
Sorta
That was JSX...
Back to the Board...
A Component has...
- Props
- State
- Children
- Life...
Component Lifecycles???
- componentWillMount
- componentDidMount
- componentWillReceiveProps
- shouldComponentUpdate
- componentWillUpdate
- componentDidUpdate
- componentWillUnmount
Take 2. Immutability
Nothing Changes
People never change, they just become more of what they are
- Count Lestat, Interview with the Vampire
Immutability is...
Basically forgetting about assignments and those little boxes holding values, you play pillow passing with values, values that never change.
But it demands a special data structure to ensure fast operation on immutable data.
Take 3: Functional Programming
Functions as First Class Citizens
You focus on VERBs, not NOUNs
So, it's eat(cat, rat), NOT cat.eat(rat)
...some pointers
- Lambda Calculus
- Higher Order Functions
- Closure
- Pure Functions
Higher Order Functions
- Functions can take functions in
- Functions can return function bodies
- Also called Functor, Functional Form etc
- map, reduce, filter etc.
Closures
- A data structure storing a function
- A function body that has its local variable snapshots remembered per call
- That's how Clojure got its name?
A pure function is a function that always returns the same output for same input
Useful for memoization, but not always pragmatic (database? random number? printing?)
Then there is partial function, laziness, sequence abstraction...
Take (Bonus): Flux
Brace yourselves...
Flux is the application architecture that Facebook uses for building client-side web applications. It complements React's composable view components by utilizing a unidirectional data flow. It's more of a pattern rather than a formal framework, and you can start using Flux immediately without a lot of new code.
A ("the") Picture?
Back to the Board...
Let's Overwhelm
- Facebook Flux
- Redux
- Reflux
- Alt
- Marty
- McFly
- Nuclear-JS
- Fluxxor
Ourselves
- Fluxible
- Flummox
- <----- This is the point I start googling for more
- Fluxette
- Yahoo Flux
- Freezer-JS
- Lux
Oh there's more (on other langauges)...
- Reagent
- Re-Frame
- Om
- Om.next
- Quiescent
- Rum
Now Nuclear-JS...
Nuclear-JS is cool because...
- One Store
- Immutable-JS
- Getters (Functional Lens?)
- Suited for large projects
- The only Flux I know?
Getters
Stores
Actions
ActionType
Components
Dispatch
Now What???
Friendly Links...
A Ride with React
By Mafinar Khan
A Ride with React
My Slides on LLC's Ride with React
- 1,820