ReactJS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220197/reactjs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3321986/giphy-2.gif)
Quiz
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220255/2016-11-11_15_05_44.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220225/flash.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3318662/jake_weary.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3318674/spenden.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220264/Backbone.js-Post-Image-1.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220280/angular.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220286/1-ZByyohMUALGVRHbMX9739Q.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220300/trend.png)
Text
Text
ReactJS
ReactJS in a Nutshell
- The V in MVC
- Declarative
- Everything is a Component
- 1-Way-Dataflow
Components
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3227679/calc.png)
Components
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3227706/calc2.png)
Components
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3232046/thinking-in-react-mock.png)
Components
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3232047/thinking-in-react-components.png)
Components
class SearchBar extends React.Component {
render() {
return (
<form>
<input type="text" placeholder="Search..." />
<p>
<input type="checkbox" />
{' '}
Only show products in stock
</p>
</form>
);
}
}
class SearchBar extends React.Component {
render() {
}
}
Components
class FilterableProductTable extends React.Component {
render() {
return (
<div>
<SearchBar />
<ProductTable products={this.props.products} />
</div>
);
}
}
JSX
- Html extension to JavaScript
- Optional
- Can be combined with JS
- Html linting
- Feels like html (but isn't)
State
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220389/state.png)
State
- stuffThatShouldBeForgottenIfTheUserRefreshes
- Belongs to component
- this.state
- Try to have as little state as possible
- Don't duplicate - calculate
State
class HelloState extends React.Component {
constructor() {
this.state = {
count: 0
};
}
render() {
return (
<div>
Count: {this.state.count}
</div>
);
}
}
class HelloState extends React.Component {
constructor() {
this.state = {
count: 0
};
}
increment() {
this.setState({
count: this.state.count + 1
});
}
render() {
return (
<div>
Count: {this.state.count}
<button onClick={this.increment}>Add 1</button>
</div>
);
}
}
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220520/declarative.png)
// index.html
<script>
function increment() {
let element = $('#count');
let current = element.text();
element.text(parseInt(current) + 1);
}
</script>
<div>
Count: <label id="count">0</label>
<button onclick="increment()">Add 1</button>
</div>
With jQuery...
Props
- stuffThatShouldStayTheSameIfTheUserRefreshes
- this.props
- read only
<todo-item title="Buy milk" color={this.state.defaultColor}>
Should I start using ReactJS?
- Easy to learn
- 1-Way-Dataflow helps to reduce complexity
- Many third party components
- Overhead
- Problematic License
Advanced State Management
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220592/redux2.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220595/flux_3.png)
Flux
React beyond the Browser
React Native
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220597/30021303_PIC-H_Dfront.png)
Server Side Rendering
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220600/web-server-icon-16.png)
React beyond React...
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220602/500628_a962.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220607/vuejs.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3220616/webcomp.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3323278/1-XlpvbC9ntipm_Y52zMtTFA.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/382945/images/3323282/Any_Questions.png)
- Demo code: https://github.com/haimich/calculator
- Implementation on Codepen: http://codepen.io/mjijackson/pen/xOzyGX
- Very good demo: http://reactfordesigners.com/labs/reactjs-introduction-for-people-who-know-just-enough-jquery-to-get-by/
- https://facebook.github.io/react/docs/thinking-in-react.html
- https://github.com/facebookincubator/create-react-app
- https://medium.freecodecamp.com/is-mvc-dead-for-the-frontend-35b4d1fe39ec#.nvumb4j5m
- https://facebook.github.io/react-native/
- https://facebook.github.io/react/docs/test-utils.html
- https://daveceddia.com/visual-guide-to-state-in-react/
- http://facebook.github.io/flux/
- redux.js.org
- https://mobxjs.github.io/mobx/
Links
ReactJS
By Michael Müller
ReactJS
- 789