15
Julian Tiemann und Hannes Kuhlmann Real-Time Anwendungen mit React und React Native entwickeln JavaScript

Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Julian Tiemann und Hannes Kuhlmann

Real-Time Anwendungen mit React und React Native entwickeln

JavaScript

Page 2: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Julian Tiemann

Developer

Moin!

Baqend PlatformSpeed Kit Plugin Hannes Kuhlmann

Developer / Co-Founder

Page 3: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

React

• Library für Frontend Applikationen – Batteries not included

• Entwickelt von Facebook seit 2011

• JavaScript Syntax Extension als Templatelanguage

• 15.0.0 seit 7. April 2016

• 16.0.0 seit Dienstag mit MIT-Lizenz

Page 4: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Warum React?

• Schnell• Virtual DOM und DOM Diffing

• Selektive Aktualisierung des DOMs

• 161.7 kb (49.8 kb gzipped) => 109 kb (34.8 kb gzipped)

• React + ReactDOM (ReactDOMServer, React-Native)

• Decoupling durch Components• Einfaches testen

Page 5: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

http://spqr.app.baqend.com

http://baqend.com/codetalksPlunker Live Coding:

Hosted App:

https://expo.io/

https://ct17.baqend.com/

Page 6: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

React Componentclass QuestionList extends React.Component {

constructor(props) {

super(props)

this.state = {

questions: []

}

}

componentWillMount() {

//Do Stuff

}

componentWillUnmount() {

//Do More Stuff

}

render() {

return (

<QuestionListComponent questions={this.state.questions} />

)

}

} https://ct17.baqend.com/

Page 7: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Component Composition

• Smart (Container)• “Controller”

• Lädt und stellt Daten zur Verfügung

• Kein DOM Markup

• Dumb (Presentational)• “View”

• Props, Daten und Callbacks

• Keine Abhängigkeiten zur App

• Nur UI-State

https://ct17.baqend.com/

Page 8: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Expressions

{question.answers ? question.answers.length : 0}

{answers.map((answer) => (

<div key={answer.key}>

{answer.upvotes}

<div>

<div>

{answer.author}

</div>

{answer.text}

</div>

</div>

))}

https://ct17.baqend.com/

Page 9: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Event Handling

<div className="upvotes" onClick={() => this.handleUpvoteAnswer(answer)}>

{answer.upvotes}

</div>

<form onSubmit={this.handleSubmit}>

<label>

Name:

<input type="text" value={this.state.value} onChange={this.handleChange} />

</label>

<input type="submit" value="Submit" />

</form>

https://ct17.baqend.com/

Page 10: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Server

CreateUpdateDelete

Pub-Sub Pub-Sub

Real-TimeQueries

(Websockets)

Fresh Caches

How to detect changes toquery results:„Give me the most popularproducts that are in stock.“

Add

Change

Remove

UpdateUpdate Database

Baqend Realtime

https://ct17.baqend.com/

Page 11: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Router

• Nicht offiziell

• https://github.com/ReactTraining/react-router

<Router>

<div className="app">

<Route exact path="/" component={QuestionList}/>

<Route exact path="/create" component={QuestionCreate}/>

<Route path="/item/:id" component={QuestionDetails}/>

</div>

</Router>

https://ct17.baqend.com/

Page 12: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

Router Navigation

• Link Component

• Higher Order Navigation Component

<div>

<Link to="/">Home</Link>

<Link to="/create">New Question</Link>

</div>

class QuestionCreateComponent extends Component {

onSubmit() {

const { history } = this.props

history.push('/')

}

}

export default withRouter(QuestionCreateComponent)

https://ct17.baqend.com/

Page 13: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

React Native

• Native Apps mit React

• React Native Bridge

• JavaScript Core Framework

• Eigene JSX Components => Native Components

• Logik in JavaScript

https://ct17.baqend.com/

Page 14: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

React Native View<TouchableHighlight onPress={this.handleUpvote}>

<View style={styles.upvotes}>

<Text style={styles.score}>

{question.upvotes}

</Text>

</View>

</TouchableHighlight>

const styles = StyleSheet.create({

upvotes: {

justifyContent: 'center',

alignItems: 'center',

alignSelf: 'stretch',

flexDirection: 'row',

padding: 16,

width: 72,

flex: 1

}

})

Page 15: Real-Time Anwendungen mit React und React Native entwickeln · Real-Time Anwendungen mit React und React Native entwickeln JavaScript. Julian Tiemann Developer Moin! Baqend Platform

We are hiring.

Contact us.

Julian Tiemann · Hannes Kuhlmann · (jt|hk)@baqend.com · www.baqend.com

Frontend DevelopersMobile Developers

Java DevelopersWeb Performance Engineers