React + Flux
and the future of e-commerce search
by
Ken Ding and Sean Kozer
What we do
- Retail eCommerce across multiple departments
- Django + Backbone + more
Let's Build Something
- Elasticsearch is great, but our front end is lacking
- Heaps of view logic makes it complex
- Only way out is to overhaul
Why React?
- Opportunity to build a prototype
- New way of thinking
- Easy for collaboration
What is React?
- Javascript library for creating UI
- Just the V in MVC
- Built by Facebook and Instagram
What is FLUX?
- Design pattern
- Unidirectional flow
Initial "React"ion
Mark up in JS?
No thanks.
Technical benefits
- Building components, not templates.
- Reduced complexity
- Declarative
- Goodbye micromanaging DOM manipulation
- Figuring out which views to update
- Virtual DOM
- Fun
Example of DOM MANIPULATION
var View = Backbone.View.extend({
modifyDOM: function() {
this.$el.html(this.template(obj));
},
render: function() {
this.$el.html(this.template(obj));
return this;
}
});
DEMO TIME
How we built it
Tech Stack
- ReactJS + Flux + Immutable JS
- Webpack
- Go
- Elasticsearch
Component Hierarchy
Component Hierarchy
Component Hierarchy
/** @jsx React.DOM */
var React = require('react');
var MainApp = React.createClass({
render: function() {
return (
<div>
<InstantBar />
<InfoBox />
<ProductGrid />
</div>
);
}
});
module.exports = MainApp;
The Flux Cycle
The Flux Cycle
The Flux Cycle
The Flux Cycle
var SuggestionActionCreator = {
fetchSelectedProduct: function (text) {
// Making a call to our server
ProductWebAPIUtils.fetchProducts(text)
.then(function (data, textStatus, jqXHR) {
AppDispatcher.dispatch({
actionType: Constants.FETCH_PRODUCTS,
data: data
});
}, function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
}
}
Lessons
- Hard to choose the right implementation
- Flux
- Reflux
- Fluxxor
- Building components from scratch
Questions?
We're hiring
check out
careers.kogan.com/software-devs-engineering