EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM...

48
EINFÜHRUNG IN REACT.JS UND REDUX

Transcript of EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM...

Page 1: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINFÜHRUNG IN REACT.JSUND REDUX

Page 2: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REACT.JSEINE JAVASCRIPT LIBRARY ZUM ERSTELLEN VON USER INTERFACES

Nur die UIVirtual DOMData Flow

Page 3: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

DATA FLOWUnidirektional ohne Event-Chaos

Page 4: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

http://www.wikihow.com/Image:Make-Spaghetti-Step-1.jpg

https://www.�ickr.com/photos/spilt-milk/5829575950

Page 5: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig
Page 6: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig
Page 7: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig
Page 8: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REACT DATA FLOW

Page 9: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VIRTUAL DOMEf�zientes UI-Rendering inklusive

Page 10: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ÄNDERUNGEN AUF DER UI - WAS TUN?Alles neuzeichnen? Flackert!

DOM manipulieren? Mühsam!

Page 11: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VIRTUAL DOMEntwickler beschreibt das vollständige Resultat

React aktualisiert den DOM mit minimalen Änderungen

Page 12: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

NUR DIE UIModel ist kein Bestandteil von React

Kann beliebig implementiert werden

Page 13: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTE

Page 14: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 15: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 16: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 17: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 18: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 19: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return React.createElement('p', null, 'Hello World!'); } }

Page 20: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTEimport React, { Component } from "react";

class HelloWorld extends Component {

render() { return <p>Hello World!</p>; } }

Page 21: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE EINFACHE KOMPONENTE<HelloWorld />

Page 22: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE KOMPONENTE MIT DATEN

Anzeige eines Users / Anzeige der Liste

Page 23: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE KOMPONENTE MIT DATENclass User extends Component {

render() { return <li> <span>{this.props.user.firstName} {this.props.user.lastName}</span> </li>; } }

Page 24: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

EINE KOMPONENTE MIT DATENclass User extends Component {

render() { return <li> <span>{this.props.user.firstName} {this.props.user.lastName}</span> </li>; } }

Page 25: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 26: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 27: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 28: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 29: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 30: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VERWENDUNG<ul> { users.map((user, index) => <User user={user} key={"user_" + index} />) } </ul>

Page 31: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ANLEGEN EINES BENUTZERS

Page 32: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ANLEGEN EINES BENUTZERSclass UserCreation extends Component {

render() { return ( <div> <div>New User</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 33: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ANLEGEN EINES BENUTZERSclass UserCreation extends Component {

render() { return ( <div> <div>New User</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 34: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ANLEGEN EINES BENUTZERSclass UserCreation extends Component {

render() { return ( <div> <div>New User</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 35: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ANLEGEN EINES BENUTZERSclass UserCreation extends Component {

render() { return ( <div> <div>New User</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 36: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

DIE GESAMTE APPLIKATION

Page 37: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REACT DATA FLOW

Page 38: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

 

Page 39: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

 

Page 40: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REDUX DATA FLOW

Page 41: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

ACTIONconst USER_ADDED = "USER_ADDED"; function addUser(user) { return { type: USER_ADDED, payload: user } }

Sehr ähnlich zu CQRS / Event Sourcing

Page 42: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

STATE TREEINITIAL_STATE = { users: [] };

REDUCERSfunction reducers(state = INITIAL_STATE, action = {}){ return { users: users(state.users, action) }; }

function users(state = INITIAL_STATE.users, action = {}) { switch (action.type) { case Events.USER_ADDED: return state.concat(action.payload); } return state; }

Page 43: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

INTEGRATION IN DIE KOMPONENTEclass UserCreation extends Component {

render() { return ( <div> <div>User Creation</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 44: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

INTEGRATION IN DIE KOMPONENTEclass UserCreation extends Component {

render() { return ( <div> <div>User Creation</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ /* ... */ }>Submit</button> </div> </div> ); } }

Page 45: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

INTEGRATION IN DIE KOMPONENTEclass UserCreation extends Component {

render() { return ( <div> <div>User Creation</div> <div> <label>First Name:</label> <input type="string" /> </div> <div> <label>Last Name:</label> <input type="string" /> </div> <div> <button onClick={ () => { this.props.submitUser({firstName: ..., lastName: ...}) } }>Submit</button> </div> </div> ); } }

 

<UserCreation submitUser={ user => dispatch(Actions.addUser(user)) } />

Page 46: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REACT HOT RELOADING

Page 47: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

REDUX LOGGER

Page 48: EINFÜHRUNG IN REACT.JS UND REDUX - Entwicklertag · 2016. 6. 29. · React aktualisiert den DOM mit minimalen Änderungen. NUR DIE UI Model ist kein Bestandteil von React Kann beliebig

VIELEN DANK!

@[email protected]://www.nicole-rauch.de

https://github.com/NicoleRauch/VortragReactUndRedux

Ganztägiger Workshop zu React und Redux