EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux....

48
EINFÜHRUNG IN REACT.JS UND REDUX

Transcript of EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux....

Page 1: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

EINFÜHRUNG IN REACT.JSUND REDUX

Page 2: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REACT.JSEINE JAVASCRIPT LIBRARY ZUM ERSTELLEN VON USER INTERFACES

Nur die UIVirtual DOMData Flow

Page 3: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

DATA FLOWUnidirektional ohne Event-Chaos

Page 4: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...
Page 6: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...
Page 7: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...
Page 8: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REACT DATA FLOW

Page 9: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

VIRTUAL DOMEf�zientes UI-Rendering inklusive

Page 10: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

DOM manipulieren? Mühsam!

Page 11: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

VIRTUAL DOMEntwickler beschreibt das vollständige Resultat

React aktualisiert den DOM mit minimalen Änderungen

Page 12: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

NUR DIE UIModel ist kein Bestandteil von React

Kann beliebig implementiert werden

Page 13: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

EINE EINFACHE KOMPONENTE

Page 14: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

EINE EINFACHE KOMPONENTE<HelloWorld />

Page 22: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

EINE KOMPONENTE MIT DATEN

Anzeige eines Users / Anzeige der Liste

Page 23: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 26: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 27: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 28: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 29: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 30: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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

Page 31: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

ANLEGEN EINES BENUTZERS

Page 32: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

DIE GESAMTE APPLIKATION

Page 37: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REACT DATA FLOW

Page 38: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

 

Page 39: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

 

Page 40: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REDUX DATA FLOW

Page 41: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

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 - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REACT HOT RELOADING

Page 47: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

REDUX LOGGER

Page 48: EINFÜHRUNG IN REACT.JS UND REDUX - Digicomp · Morgen: Ganztägiger Workshop zu React und Redux. Created Date: 6/17/2016 8:25:15 PM ...

VIELEN DANK!

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

https://github.com/NicoleRauch/VortragReactUndRedux

Morgen: Ganztägiger Workshop zu React und Redux