SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
React on ES6+
React on ES6+ @nikgraf
Nik Graf
@nikgraf

nik@nikgraf.com
Creator of Belle
Working with StarterSquad
React on ES6+ @nikgraf
ECMAScript 5
December 2009 - ECMAScript 5 was published
React on ES6+ @nikgraf
Why bother about ES6+?
Classes

Enhanced Object Literals

Block-scoped binding constructs (let + const)

Property Initialisers

Arrow Functions

Template Strings

Spread Attributes

Deconstructing Attributes

Generators

DataStructures (Map, Set, WeakMap, WeakSet)

… and many more
React on ES6+ @nikgraf
ES6 is finalised


Final Draft April 14, 2015 Rev 38

http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#final_draft



🎉🎂 🎈🎊
React on ES6+ @nikgraf
People use ES6+
React on ES6+ @nikgraf
ECMAScript 6
April 2015 - ECMAScript 2015 (ES6) finalised
React on ES6+ @nikgraf
Compilers
Traceur
JSTransform (deprecated)
Babel
React on ES6+ @nikgraf


Created by Sebastian McKenzie (started fall 2014)


- JSX Support, ES6 Support, ES7 Support

- Widely adopted
React on ES6+ @nikgraf
Facebook ❤ Babel
React on ES6+ @nikgraf
Block-scoped binding constructs
const hello = 'Hello';
hello = 'Hola'; // this is not valid
React on ES6+ @nikgraf
Block-scoped binding constructs
function varTest() {
var x = 31;
if (true) {
var x = 71; // same variable!
console.log(x); // 71
}
console.log(x); // 71
}
React on ES6+ @nikgraf
Block-scoped binding constructs
function letTest() {
let x = 31;
if (true) {
let x = 71; // different variable
console.log(x); // 71
}
console.log(x); // 31
}
React on ES6+ @nikgraf
Classes
// The ES5 way
var Photo = React.createClass({
handleDoubleTap: function(e) { … },
render: function() { … },
});
// The ES6+ way
class Photo extends React.Component {
handleDoubleTap(e) { … }
render() { … }
}
React on ES6+ @nikgraf
Classes
// The ES5 way
var EmbedModal = React.createClass({
componentWillMount: function() { … },
});
// The ES6+ way
class EmbedModal extends React.Component {
constructor(props) {
super(props);
}
}
React on ES6+ @nikgraf
Property Initialisers
// The ES5 way
var Video = React.createClass({
getDefaultProps: function() {
return {
autoPlay: false,
maxLoops: 10,
};
},
getInitialState: function() {
return {
loopsRemaining: this.props.maxLoops,
};
},
propTypes: {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired
},
});
React on ES6+ @nikgraf
Property Initialisers
// The ES6+ way
class Video extends React.Component {
static defaultProps = {
autoPlay: false,
maxLoops: 10,
}
static propTypes = {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired
}
state = {
loopsRemaining: this.props.maxLoops,
}
}
React on ES6+ @nikgraf
Arrow Functions
// ES5
[2,2,3].map(function(item) {
return item + 1;
});
// Expression bodies
[2,2,3].map(item => item + 1);
// [3,3,4]
[2,2,3].map((item, index) => item + index);
// [2,3,5]
// Statement bodies
[2,2,3].forEach(item => {
if (item === 2) {
console.log('Found the number 2');
}
});
React on ES6+ @nikgraf
Arrow Functions
// Lexical this
const bob = {
_name: "Bob",
_friends: [],
printFriends() {
this._friends.forEach(friend =>
console.log(this._name + " knows " + friend));
}
}
React on ES6+ @nikgraf
Template Strings
// Multiline strings
const text = `In ES5 this is
not legal.
Good to know.`;
// Interpolate variable bindings
const city = 'Vienna';
const time = 'today';
// ES5
console.log('Hello ' + city + ', how are you ' + time + '?');
// ES6+
console.log(`Hello ${city}, how are you ${time}?`);
// results in "Hello Vienna, how are you today?"
React on ES6+ @nikgraf
Spread Attributes
const photoSet = {
coverIndex: 1,
photos: [
{ url: '…' },
{ url: '…' }
]
}
// explicit assignment
<PhotoGrid coverIndex={ photoSet.coverIndex }
photos={ photoSet.photos } />
// spread attributes
<PhotoGrid { ...photoSet } />
React on ES6+ @nikgraf
Deconstructing
var x = [1,2,3];
// ES5
var a = x[0];
var b = x[2];
// ES6+ list matching
const [a, , b] = x;
React on ES6+ @nikgraf
Deconstructing
this.props = {
className: 'photo box',
isSquare: true,
width: 200
}
const { className, ...others } = this.props;
// others contains all properties of this.props
// except for className
// className == 'photo box'
// others == { isSquare: true, width: 200 }
React on ES6+ @nikgraf
Deconstruct & Spread
class PhotoPage extends React.Component {
onLoadMore() { … }
render() {
const {
className,
...otherProps
} = this.props;
return (
<div className={className}>
<PhotoGrid {...otherProps} />
<button onClick={ this.onLoadMore.bind(this) }>
Load more
</button>
</div>
);
}
}
React on ES6+ @nikgraf
ProTip: Eslint
created by Nicholas Zakas
- Enable/Disabled Rules on demand
- Follows the standard + JSX Support
- AirBnB’s fantastic JavaScript Guide + .eslintrc

https://github.com/airbnb/javascript/
React on ES6+ @nikgraf
Eslint as Atom Plugin
React on ES6+ @nikgraf
End
Special thanks to Steven Luscher for the original post
on “React on ES6+”

https://babeljs.io/blog/2015/06/07/react-on-es6-plus
Checkout Belle

https://nikgraf.github.io/belle/

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

React state managmenet with Redux
React state managmenet with ReduxReact state managmenet with Redux
React state managmenet with Redux
 
React, Redux, ES2015 by Max Petruck
React, Redux, ES2015   by Max PetruckReact, Redux, ES2015   by Max Petruck
React, Redux, ES2015 by Max Petruck
 
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
 
React.js and Redux overview
React.js and Redux overviewReact.js and Redux overview
React.js and Redux overview
 
ProvJS: Six Months of ReactJS and Redux
ProvJS:  Six Months of ReactJS and ReduxProvJS:  Six Months of ReactJS and Redux
ProvJS: Six Months of ReactJS and Redux
 
Academy PRO: React JS. Redux & Tooling
Academy PRO: React JS. Redux & ToolingAcademy PRO: React JS. Redux & Tooling
Academy PRO: React JS. Redux & Tooling
 
React JS and Redux
React JS and ReduxReact JS and Redux
React JS and Redux
 
ReactJs presentation
ReactJs presentationReactJs presentation
ReactJs presentation
 
Redux vs Alt
Redux vs AltRedux vs Alt
Redux vs Alt
 
Intro to ReactJS
Intro to ReactJSIntro to ReactJS
Intro to ReactJS
 
React js
React jsReact js
React js
 
Introduction to React & Redux
Introduction to React & ReduxIntroduction to React & Redux
Introduction to React & Redux
 
React & redux
React & reduxReact & redux
React & redux
 
Modern Web Developement
Modern Web DevelopementModern Web Developement
Modern Web Developement
 
Redux Universal
Redux UniversalRedux Universal
Redux Universal
 
Learn react-js
Learn react-jsLearn react-js
Learn react-js
 
React Lifecycle and Reconciliation
React Lifecycle and ReconciliationReact Lifecycle and Reconciliation
React Lifecycle and Reconciliation
 
Designing applications with Redux
Designing applications with ReduxDesigning applications with Redux
Designing applications with Redux
 
Better React state management with Redux
Better React state management with ReduxBetter React state management with Redux
Better React state management with Redux
 
React native app with type script tutorial
React native app with type script tutorialReact native app with type script tutorial
React native app with type script tutorial
 

Similar a React on es6+

JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6
Solution4Future
 
Modeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based GamesModeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based Games
Ray Toal
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
David Padbury
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
rajivmordani
 

Similar a React on es6+ (20)

ES6: The Awesome Parts
ES6: The Awesome PartsES6: The Awesome Parts
ES6: The Awesome Parts
 
EcmaScript 6 - The future is here
EcmaScript 6 - The future is hereEcmaScript 6 - The future is here
EcmaScript 6 - The future is here
 
"let ECMAScript = 6"
"let ECMAScript = 6" "let ECMAScript = 6"
"let ECMAScript = 6"
 
Es6 hackathon
Es6 hackathonEs6 hackathon
Es6 hackathon
 
Intro to ES6 and why should you bother !
Intro to ES6 and why should you bother !Intro to ES6 and why should you bother !
Intro to ES6 and why should you bother !
 
JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6JavaScript - new features in ECMAScript 6
JavaScript - new features in ECMAScript 6
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
ES6 is Nigh
ES6 is NighES6 is Nigh
ES6 is Nigh
 
Getting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascriptGetting started with ES6 : Future of javascript
Getting started with ES6 : Future of javascript
 
The State of JavaScript (2015)
The State of JavaScript (2015)The State of JavaScript (2015)
The State of JavaScript (2015)
 
ESCMAScript 6: Get Ready For The Future. Now
ESCMAScript 6: Get Ready For The Future. NowESCMAScript 6: Get Ready For The Future. Now
ESCMAScript 6: Get Ready For The Future. Now
 
WebGL: GPU acceleration for the open web
WebGL: GPU acceleration for the open webWebGL: GPU acceleration for the open web
WebGL: GPU acceleration for the open web
 
Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015Impress Your Friends with EcmaScript 2015
Impress Your Friends with EcmaScript 2015
 
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...Visual Component Testing  -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
Visual Component Testing -- w/ Gil Tayar (Applitools) and Gleb Bahmutov (Cyp...
 
AkJS Meetup - ES6++
AkJS Meetup -  ES6++AkJS Meetup -  ES6++
AkJS Meetup - ES6++
 
Modeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based GamesModeling Patterns for JavaScript Browser-Based Games
Modeling Patterns for JavaScript Browser-Based Games
 
JavaScript Growing Up
JavaScript Growing UpJavaScript Growing Up
JavaScript Growing Up
 
JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8JavaScript Editions ES7, ES8 and ES9 vs V8
JavaScript Editions ES7, ES8 and ES9 vs V8
 
The Beauty Of Java Script V5a
The Beauty Of Java Script V5aThe Beauty Of Java Script V5a
The Beauty Of Java Script V5a
 
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
SenchaCon 2016: Building a Faceted Catalog of Video Game Assets Using Ext JS ...
 

Más de Nikolaus Graf

Más de Nikolaus Graf (8)

Type Systems & Props Design - Exploring PropTypes, TypeScript, Flow & Reason
Type Systems & Props Design - Exploring PropTypes, TypeScript, Flow & ReasonType Systems & Props Design - Exploring PropTypes, TypeScript, Flow & Reason
Type Systems & Props Design - Exploring PropTypes, TypeScript, Flow & Reason
 
Reason and GraphQL
Reason and GraphQLReason and GraphQL
Reason and GraphQL
 
Get started with Reason
Get started with ReasonGet started with Reason
Get started with Reason
 
Introduction to Serverless
Introduction to ServerlessIntroduction to Serverless
Introduction to Serverless
 
Serverless Framework Intro
Serverless Framework IntroServerless Framework Intro
Serverless Framework Intro
 
Rich text editing with Draft.js
Rich text editing with Draft.jsRich text editing with Draft.js
Rich text editing with Draft.js
 
AngularDart Introduction
AngularDart IntroductionAngularDart Introduction
AngularDart Introduction
 
Web Components
Web ComponentsWeb Components
Web Components
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 

React on es6+

  • 2. React on ES6+ @nikgraf Nik Graf @nikgraf
 nik@nikgraf.com Creator of Belle Working with StarterSquad
  • 3. React on ES6+ @nikgraf ECMAScript 5 December 2009 - ECMAScript 5 was published
  • 4. React on ES6+ @nikgraf Why bother about ES6+? Classes
 Enhanced Object Literals
 Block-scoped binding constructs (let + const)
 Property Initialisers
 Arrow Functions
 Template Strings
 Spread Attributes
 Deconstructing Attributes
 Generators
 DataStructures (Map, Set, WeakMap, WeakSet)
 … and many more
  • 5. React on ES6+ @nikgraf ES6 is finalised 
 Final Draft April 14, 2015 Rev 38
 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#final_draft
 
 🎉🎂 🎈🎊
  • 6. React on ES6+ @nikgraf People use ES6+
  • 7. React on ES6+ @nikgraf ECMAScript 6 April 2015 - ECMAScript 2015 (ES6) finalised
  • 8. React on ES6+ @nikgraf Compilers Traceur JSTransform (deprecated) Babel
  • 9. React on ES6+ @nikgraf 
 Created by Sebastian McKenzie (started fall 2014) 
 - JSX Support, ES6 Support, ES7 Support
 - Widely adopted
  • 10. React on ES6+ @nikgraf Facebook ❤ Babel
  • 11. React on ES6+ @nikgraf Block-scoped binding constructs const hello = 'Hello'; hello = 'Hola'; // this is not valid
  • 12. React on ES6+ @nikgraf Block-scoped binding constructs function varTest() { var x = 31; if (true) { var x = 71; // same variable! console.log(x); // 71 } console.log(x); // 71 }
  • 13. React on ES6+ @nikgraf Block-scoped binding constructs function letTest() { let x = 31; if (true) { let x = 71; // different variable console.log(x); // 71 } console.log(x); // 31 }
  • 14. React on ES6+ @nikgraf Classes // The ES5 way var Photo = React.createClass({ handleDoubleTap: function(e) { … }, render: function() { … }, }); // The ES6+ way class Photo extends React.Component { handleDoubleTap(e) { … } render() { … } }
  • 15. React on ES6+ @nikgraf Classes // The ES5 way var EmbedModal = React.createClass({ componentWillMount: function() { … }, }); // The ES6+ way class EmbedModal extends React.Component { constructor(props) { super(props); } }
  • 16. React on ES6+ @nikgraf Property Initialisers // The ES5 way var Video = React.createClass({ getDefaultProps: function() { return { autoPlay: false, maxLoops: 10, }; }, getInitialState: function() { return { loopsRemaining: this.props.maxLoops, }; }, propTypes: { autoPlay: React.PropTypes.bool.isRequired, maxLoops: React.PropTypes.number.isRequired }, });
  • 17. React on ES6+ @nikgraf Property Initialisers // The ES6+ way class Video extends React.Component { static defaultProps = { autoPlay: false, maxLoops: 10, } static propTypes = { autoPlay: React.PropTypes.bool.isRequired, maxLoops: React.PropTypes.number.isRequired } state = { loopsRemaining: this.props.maxLoops, } }
  • 18. React on ES6+ @nikgraf Arrow Functions // ES5 [2,2,3].map(function(item) { return item + 1; }); // Expression bodies [2,2,3].map(item => item + 1); // [3,3,4] [2,2,3].map((item, index) => item + index); // [2,3,5] // Statement bodies [2,2,3].forEach(item => { if (item === 2) { console.log('Found the number 2'); } });
  • 19. React on ES6+ @nikgraf Arrow Functions // Lexical this const bob = { _name: "Bob", _friends: [], printFriends() { this._friends.forEach(friend => console.log(this._name + " knows " + friend)); } }
  • 20. React on ES6+ @nikgraf Template Strings // Multiline strings const text = `In ES5 this is not legal. Good to know.`; // Interpolate variable bindings const city = 'Vienna'; const time = 'today'; // ES5 console.log('Hello ' + city + ', how are you ' + time + '?'); // ES6+ console.log(`Hello ${city}, how are you ${time}?`); // results in "Hello Vienna, how are you today?"
  • 21. React on ES6+ @nikgraf Spread Attributes const photoSet = { coverIndex: 1, photos: [ { url: '…' }, { url: '…' } ] } // explicit assignment <PhotoGrid coverIndex={ photoSet.coverIndex } photos={ photoSet.photos } /> // spread attributes <PhotoGrid { ...photoSet } />
  • 22. React on ES6+ @nikgraf Deconstructing var x = [1,2,3]; // ES5 var a = x[0]; var b = x[2]; // ES6+ list matching const [a, , b] = x;
  • 23. React on ES6+ @nikgraf Deconstructing this.props = { className: 'photo box', isSquare: true, width: 200 } const { className, ...others } = this.props; // others contains all properties of this.props // except for className // className == 'photo box' // others == { isSquare: true, width: 200 }
  • 24. React on ES6+ @nikgraf Deconstruct & Spread class PhotoPage extends React.Component { onLoadMore() { … } render() { const { className, ...otherProps } = this.props; return ( <div className={className}> <PhotoGrid {...otherProps} /> <button onClick={ this.onLoadMore.bind(this) }> Load more </button> </div> ); } }
  • 25. React on ES6+ @nikgraf ProTip: Eslint created by Nicholas Zakas - Enable/Disabled Rules on demand - Follows the standard + JSX Support - AirBnB’s fantastic JavaScript Guide + .eslintrc
 https://github.com/airbnb/javascript/
  • 26. React on ES6+ @nikgraf Eslint as Atom Plugin
  • 27. React on ES6+ @nikgraf End Special thanks to Steven Luscher for the original post on “React on ES6+”
 https://babeljs.io/blog/2015/06/07/react-on-es6-plus Checkout Belle
 https://nikgraf.github.io/belle/