einführung in react

63

Upload: sebastian-springer

Post on 15-Feb-2017

205 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Einführung in React
Page 2: Einführung in React

Sebastian• Sebastian Springer

• aus München

• arbeite bei MaibornWolff GmbH

• https://github.com/sspringer82

• @basti_springer

• JavaScript Entwickler

Page 3: Einführung in React

IT-Beratung & Software Engineering

Page 4: Einführung in React

Und was genau ist React?

lichtkunst.73 / pixelio.de

Page 5: Einführung in React

var HelloWorld = React.createClass({ render: function () { return ( <h1>Hello World!</h1> ); }});ReactDOM.render( <HelloWorld />, document.getElementById('example') );

Page 6: Einführung in React

A JavaScript library for building user interfaces

Page 7: Einführung in React

Just the UI - no structure

harry256 / pixelio.de

Page 8: Einführung in React

Virtual DOM

Page 9: Einführung in React

<!DOCTYPE HTML>

<html> <head> <meta charset=”UTF-8”> </head> <body> <h1>Hello World</h1> </body></html>

html"## head$   %## meta%## body %## h1 %## #text

Page 10: Einführung in React

Das DOM ist eine Baumstruktur. Diese kann bei Änderungen recht einfach verarbeitet werden.

Das DOM bei umfangreicheren Single Page-Applikationen kann recht umfangreich werden. Die Verarbeitung wird dann

sehr langsam.

Page 11: Einführung in React

Das Virtual DOM ist eine Abstraktion des DOM. React führt Berechnungen und Änderungen durch und fasst die Aktionen so zusammen, dass sie vom Browser möglichst

performant umgesetzt werden können.

React verfügt über zusätzliche Attribute, die nicht im DOM auftauchen.

Page 12: Einführung in React

React Element

Light, stateless, immutable, virtual representation of a DOM Element.

var HelloWorld = React.createClass({ render: function () { return ( <h1>Hello World!</h1> ); }});

Page 13: Einführung in React

React Component

Stateful elements of a react application.

Bei Änderungen werden die Components in Elements übersetzt.

Im Virtual DOM werden die Änderungen berechnet und für den Browser optimiert auf den tatsächlichen DOM

angewendet.

Page 14: Einführung in React

Datenfluss

Rita Gattermann / pixelio.de

Page 15: Einführung in React

One Way Data Binding

Parent ChildDatenfluss

Events

Page 16: Einführung in React

Security

S. Hofschlaeger / pixelio.de

Page 17: Einführung in React

Security

React weist eine eingebaute XSS Protection auf. Es ist nur recht aufwändig möglich, HTML-Strings direkt auszugeben.

Man muss diese Sicherung also bewusst umgehen.

Page 18: Einführung in React

JSX

Page 19: Einführung in React

var HelloWorld = React.createClass({ render: function () { return ( <h1>Hello World!</h1> ); }});ReactDOM.render( <HelloWorld />, document.getElementById('example') );

Page 20: Einführung in React

JSX

Syntax-Erweiterung für JavaScript, die aussieht wie XML.

React transformiert JSX in natives JavaScript. Man kann also React auch ohne JSX schreiben.

Page 21: Einführung in React

Hello World

Thorsten Müller / pixelio.de

Page 22: Einführung in React

index.html<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>React</title> <link rel="stylesheet" href="css/style.css" /> <script src="js/lib/react.js"></script> <script src=“js/lib/react-dom.js"></script> <script src=“js/lib/browser.js"></script> <script src=“js/lib/jquery.min.js"></script> </head> <body> <div id="content"></div> <script type="text/babel" src=“js/app/app.js"></script> </body> </html>

Page 23: Einführung in React

app.js

var HelloWorld = React.createClass({ render: function () { return ( <h1>Hello World</h1> ) }});ReactDOM.render( <HelloWorld />, document.getElementById('content') );

Page 24: Einführung in React

ES 6 Klassen

class HelloWorld extends React.Component { render() { return ( <h1>Hello World</h1> ) }} ReactDOM.render( <HelloWorld />, document.getElementById('content') );

Alternativ können Components auch in ES6 formuliert werden.

Page 25: Einführung in React

Components

class und for sind reservierte Wörter in JavaScript.

Deswegen müssen in Components className und htmlFor verwendet werden.

Page 26: Einführung in React

Props

Page 27: Einführung in React

Props

Informationen, die von außen in die Komponente hineingereicht werden.

Page 28: Einführung in React

Props

class HelloWorld extends React.Component { render() { return ( <h1>Hello {this.props.name}</h1> ) }} ReactDOM.render( <HelloWorld name="Klaus"/>, document.getElementById('content') );

Page 29: Einführung in React

Props

Standardwerte für props werden über getDefaultProps gesetzt.

Page 30: Einführung in React

State

Page 31: Einführung in React

State

Jede Komponente verwaltet ihren eigenen internen State.

Bei einer Änderung des States wird die render-Methode erneut ausgeführt.

Der State wird über setState gesetzt.

Page 32: Einführung in React

Stateclass HelloWorld extends React.Component { constructor() { super(); this.state = { time: 0 } } componentDidMount() { this.interval = setInterval(() => { this.setState({time: this.state.time + 1}); }, 1000); } render() { return ( <h1>{this.state.time}</h1> ) }}

Page 33: Einführung in React

State

Wenn eine Komponente mit createClass erstellt wird, werden die Startwerte des States mit getInitialState gesetzt.

Page 34: Einführung in React

Events PeterFranz / pixelio.de

Page 35: Einführung in React

Events

Um Informationen von der Darstellung in die Komponente fließen zu lassen, werden Events verwendet.

Typische Events sind onChange, onClick, onSubmit,…

An diese Events werden Callback-Funktionen der Komponente gebunden.

Page 36: Einführung in React

Datenflussclass HelloWorld extends React.Component { constructor() { super(); this.state = { name: 'Hans-Peter' } } handleValueChange(e) { this.setState({name: e.target.value}); } render() { return ( <div> <div>{this.state.name}</div> <input type="text" value={this.state.name} onChange={this.handleValueChange.bind(this)} /> </div> ) }}

Page 37: Einführung in React

Datenfluss

Page 38: Einführung in React

Komponenten-Hierarchie

detlef menzel / pixelio.de

Page 39: Einführung in React

Komponenten-Hierarchie

Elternkomponente

Kindkomponente

Page 40: Einführung in React
Page 41: Einführung in React

ParentComponent

ChildComponent

Page 42: Einführung in React

ParentComponent

ChildComponentchangeColor

Page 43: Einführung in React

var ParentComponent = React.createClass({ render: function() { return ( <div> <div>Parent</div> <ChildComponent /> </div> ) }});var ChildComponent = React.createClass({ render: function() { return ( <div> <button>push</button> </div> ) }});

ReactDOM.render( <ParentComponent />, document.getElementById('content') );

Page 44: Einführung in React

var ParentComponent = React.createClass({ getInitialState: function () { return { red: true, yellow: false, green: false } }, handleChange: function() { this.setState({ red: false, green: true }); }, render: function() { return ( <div> <ChildComponent onChangeColor={this.handleChange}/> </div> ) }});

Page 45: Einführung in React

var ChildComponent = React.createClass({ handleChange: function() { this.props.onChangeColor(); }, render: function() { return ( <div> <button onClick={this.handleChange}>push</button> </div> ) }});

Page 46: Einführung in React

Lifecycle

uschi dreiucker / pixelio.de

Page 47: Einführung in React

Lifecycle

Initialisierung: Die Komponente wird zum ersten Mal eingebunden.

State Change: Der State einer Komponente wird verändert.

Props Change: Die Props einer Komponente werden geändert.

Page 48: Einführung in React

Initialisierung

GetDefaultProps

GetInitialState

ComponentWillMount

Render

ComponentDidMount

Page 49: Einführung in React

State Change

ShouldComponentUpdate

ComponentWillUpdate

Render

ComponentDidUpdate

Page 50: Einführung in React

Props Change

ComponentWillReceiveProps

ComponentShouldUpdate

ComponentWillUpdate

Render

ComponentDidUpdate

Page 51: Einführung in React

Build

Rudolpho Duba / pixelio.de

Page 52: Einführung in React

Build

Aktuell besteht die Applikation noch aus mehreren Dateien. Das Ziel ist, dass nur noch eine Datei ausgeliefert wird.

React-Applikationen können mit verschiedenen Build-Systemen wie z.B. webpack gebaut werden.

Page 53: Einführung in React

Build{ "scripts": { "build": "node_modules/.bin/webpack main.js bundle.js --module-bind 'js=babel-loader'" }, "dependencies": { "babel-core": "^6.9.0", "babel-loader": "^6.2.4", "babel-preset-es2015": "^6.9.0", "babel-preset-react": "^6.5.0", "react": "^15.0.2", "react-dom": "^15.0.2", "webpack": "^1.13.1" } }

Page 54: Einführung in React

Build$ npm install $ npm run build

> @ build /react > webpack main.js bundle.js --module-bind 'js=babel-loader'

Hash: 154dd060b2495527de56 Version: webpack 1.13.1 Time: 3574ms Asset Size Chunks Chunk Names bundle.js 702 kB 0 [emitted] main + 169 hidden modules

Page 55: Einführung in React

Build

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Hello React!</title> </head> <body> <div id="example"></div> <script src="bundle.js"></script> </body> </html>

Page 56: Einführung in React
Page 57: Einführung in React

Flux

Architektur für React-Applikationen. Kein Framework, sondern mehr eine Guideline.

Page 58: Einführung in React

Flux

Action Dispatcher Store View

API

Page 59: Einführung in React

Flux

Actions: reichen Informationen an den Dispatcher weiter

Dispatcher: Reicht die Informationen zu den registrierten Stores weiter

Stores: Halten den Application State und die Logik

Views: React Komponenten, die den State aus den Stores bekommen

Page 60: Einführung in React

Flux

Die Interaktion erfolgt über die Komponenten, die Actions auslösen.

Die Views modifizieren den Application State nicht direkt.

Vorteil: Unidirektionaler Datenfluss und Entkopplung

Page 61: Einführung in React

Flux

Es gibt mittlerweile mehrere Flux-Implementierungen: Flux, Fluxxor, RefulxJS, Redux oder fluxible-app.

Page 62: Einführung in React

Fragen?

Rainer Sturm / pixelio.de

Page 63: Einführung in React

KONTAKT

Sebastian Springer [email protected]

MaibornWolff GmbH Theresienhöhe 13 80339 München

@basti_springer

https://github.com/sspringer82