SlideShare a Scribd company logo
1 of 41
Download to read offline
React Native
Developing an app similar to Uber in JavaScript
Caio Ariede
Full Stack Developer at Parasail.com
2/16/2017
github.com/caioariede
Topics
● ECMAScript 6 (es6)
● React
● React Native
● Develop an app similar to Uber
ES 6
2015
"Harmony"
ES6: Modules
// lib/math.js
export function sum (x, y) { return x + y }
export var pi = 3.141593
// someApp.js
import * as math from "lib/math"
console.log("2π = " + math.sum(math.pi, math.pi))
ES6: Classes
class Circle extends Shape {
constructor (id, x, y, radius) {
super(id, x, y)
this.radius = radius
}
}
React
React: JSX
const element = (
<h1 className="greeting">
Hello, world!
</h1>
)
React: Components
class Welcome extends React.Component {
render() {
return <h1>Welcome, {this.props.name}</h1>;
}
}
// <Welcome name="Fulano" />
React: State
class Counter extends React.Component {
state = {counter: 0}
onClick() {
this.setState({counter: this.state.counter+1})
}
render() {
return <div>
<span>{this.state.counter}</span>
<button onClick={this.onClick}>add</button>
</div>
}
}
React: VirtualDOM
Component VirtualDOM DOM (Browser)
render
React Native
React Native: Who uses?
React Native: Features
● Native apps (native UI components)
● No need to recompile every time
● Reusable code for iOS and Android (80%)
● Communication with native functions
○ Objective-C, Java
Fonte: https://speakerdeck.com/frantic/react-native-under-the-hood
Idea: App similar to Uber
● Login with Facebook
● Geolocation (passenger)
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Using only JavaScript
Dependencies
Getting Started
● npm install -g react-native-cli
● react-native init UberProject
● react-native run-ios
Project dependencies
● firebase: backend/database
● react-native-fbsdk: login with facebook
● react-native-maps: native map components
● geofire: location queries
● mapbox: calculate routes
Firebase: what's?
● Backend as a service
● Real-time database
● Handles authentication
○ oAuth, Facebook, Google, etc.
Firebase: authentication
OAuth token
Check token
Login
onClick() {
LoginManager.logInWithReadPermissions(['public_profile']).then(result => {
if (!result.isCancelled) {
} else {
console.log('login: user cancelled')
}
})
}
onClick() {
LoginManager.logInWithReadPermissions(['public_profile']).then(result => {
if (!result.isCancelled) {
AccessToken.getCurrentAccessToken().then(tokenResult => {
return auth.signInWithCredential(
facebook.credential(tokenResult.accessToken))
}).catch(err => console.log('login error: ' + err))
} else {
console.log('login: user cancelled')
}
})
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger)
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Map
class Map extends Component {
state = {
passengerPosition: {latitude: 0, longitude: 0},
}
render() {
return (
<MapView>
<Marker coordinate={this.state.passengerPosition} />
</MapView>
)
}
}
watchPassenger() {
const positionOptions = {
enableHighAccuracy: true,
}
navigator.geolocation.watchPosition(pos => {
this.updatePassengerPosition({latitude: pos.latitude,
longitude: pos.longitude})
}, positionOptions)
}
updatePassengerPosition(passengerPosition) {
this.setState({passengerPosition})
}
Geolocation
Saving location to Firebase
updatePassengerPosition(passengerPosition) {
this.setState({passengerPosition})
const user = firebase.database().ref('users/' + this.userId)
user.update({passengerPosition})
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers)
● Trace/display route
● Nearest driver
Real-time updates of drivers
watchDrivers() {
firebase.database().ref('drivers').on('child_changed', data => {
let drivers = this.state.drivers
drivers[driver.id] = {id: data.key, position}
this.setState({drivers})
})
}
Displaying drivers on map
renderDrivers() {
return this.state.drivers.map(driver => (
<Marker key={driver.id} coordinate={driver.position}
image={carIcon} />
))
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route
● Nearest driver
Destination
class SetDestination extends MapMixin {
constructor(props) {
this.state.destinationPosition = randomPosition(
props.passengerPosition, 500) // 500 meters
}
renderDestinationPosition() {
return <Marker draggable image={markerIcon}
coordinate={this.state.destinationPosition} />
}
}
Trace route
calculateRoute() {
const mode = 'driving'
const origin = buildLngLat(this.state.pickupPosition)
const destination = buildLngLat(this.state.destinationPosition)
const accessToken = this.mapBoxAccessToken
const url = buildMapBoxUrl(mode, origin, destination, accessToken)
fetch(url).then(response => response.json()).then(json => {
this.setState({route: getCoordinates(json)})
}).catch(e => {
console.warn(e)
})
}
Display route
renderRoute() {
return (
<MapView.Polyline strokeWidth={4}
coordinates={[this.state.passengerPosition,
...this.state.route,
this.state.destinationPosition]} />
)
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route √
● Nearest driver
GeoFire
geofire
key1: 37,-122
key2: lat, lng
key3: lat, lng
geoFire.set("key1", [37, -122])
listener geoquery
lat, lng
raio
geoquery
lat, lng
raio
Notify current geoqueries
Nearest driver
let radius = 0.1 // 100m
let currentLocation = [
passengerPosition.latitude,
passengerPosition.longitude,
]
let geoQuery = this.geoFire.query({center: currentLocation, radius})
let driversFound = []
geoQuery.on('key_entered', (key, location, distance) => {
driversFound.push({key, location, distance})
})
watchDriversFound()
Nearest driver
watchDriversFound() {
if (driversFound.length === 0) {
geoQuery.updateCriteria({radius: radius + 0.1})
} else {
let minDistance = -1, nearestDriver = null
driversFound.forEach(driver => {
if (driver.distance < minDistance || minDistance === -1)
minDistance = driver.distance, nearestDriver = driver
})
this.setState({nearestDriver: driver})
}
}
Idea: App similar to Uber
● Login with Facebook √
● Geolocation (passenger) √
● Real-time updates (drivers) √
● Trace/display route √
● Nearest driver √
Questions?
caioariede
on github and twitter

More Related Content

Viewers also liked

Viewers also liked (20)

React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScriptReact Native Introduction: Making Real iOS and Android Mobile App By JavaScript
React Native Introduction: Making Real iOS and Android Mobile App By JavaScript
 
React native sharing
React native sharingReact native sharing
React native sharing
 
A tour of React Native
A tour of React NativeA tour of React Native
A tour of React Native
 
SONY BBS - React Native
SONY BBS - React NativeSONY BBS - React Native
SONY BBS - React Native
 
Creating books app with react native
Creating books app with react nativeCreating books app with react native
Creating books app with react native
 
React native - What, Why, How?
React native - What, Why, How?React native - What, Why, How?
React native - What, Why, How?
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
 
What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?What's This React Native Thing I Keep Hearing About?
What's This React Native Thing I Keep Hearing About?
 
What is FED
What is FEDWhat is FED
What is FED
 
Trend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding toolTrend Micro Web's Scaffolding tool
Trend Micro Web's Scaffolding tool
 
React Native for ReactJS Devs
React Native for ReactJS DevsReact Native for ReactJS Devs
React Native for ReactJS Devs
 
React native redux_sharing
React native redux_sharingReact native redux_sharing
React native redux_sharing
 
Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏Comunicado a los venezolanos - Hugo Carvajal‏
Comunicado a los venezolanos - Hugo Carvajal‏
 
React Native for Web
React Native for WebReact Native for Web
React Native for Web
 
Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922Dialnet filosofia delderechoencompendio-2058922
Dialnet filosofia delderechoencompendio-2058922
 
Andres 3
Andres 3Andres 3
Andres 3
 
React Native - Workshop
React Native - WorkshopReact Native - Workshop
React Native - Workshop
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014Southern Traditions Outdoors July - August 2014
Southern Traditions Outdoors July - August 2014
 
Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015Southern Traditions Outdoors - November/December 2015
Southern Traditions Outdoors - November/December 2015
 

Similar to React Native: Developing an app similar to Uber in JavaScript

Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
偉格 高
 

Similar to React Native: Developing an app similar to Uber in JavaScript (20)

Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.Migrating from Flux to Redux. Why and how.
Migrating from Flux to Redux. Why and how.
 
Reduxing like a pro
Reduxing like a proReduxing like a pro
Reduxing like a pro
 
Developing web-apps like it's 2013
Developing web-apps like it's 2013Developing web-apps like it's 2013
Developing web-apps like it's 2013
 
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
Going fullstack React(ive) - Paulo Lopes - Codemotion Amsterdam 2017
 
React lecture
React lectureReact lecture
React lecture
 
Universal JS Applications with React
Universal JS Applications with ReactUniversal JS Applications with React
Universal JS Applications with React
 
Rntb20200805
Rntb20200805Rntb20200805
Rntb20200805
 
Express JS
Express JSExpress JS
Express JS
 
Workshop 25: React Native - Components
Workshop 25: React Native - ComponentsWorkshop 25: React Native - Components
Workshop 25: React Native - Components
 
Http Communication in Angular 2.0
Http Communication in Angular 2.0Http Communication in Angular 2.0
Http Communication in Angular 2.0
 
Higher Order Components and Render Props
Higher Order Components and Render PropsHigher Order Components and Render Props
Higher Order Components and Render Props
 
How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0How to Build SPA with Vue Router 2.0
How to Build SPA with Vue Router 2.0
 
Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React Crossing platforms with JavaScript & React
Crossing platforms with JavaScript & React
 
Creating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdfCreating an Uber Clone - Part XXIX.pdf
Creating an Uber Clone - Part XXIX.pdf
 
Advanced redux
Advanced reduxAdvanced redux
Advanced redux
 
React native by example by Vadim Ruban
React native by example by Vadim RubanReact native by example by Vadim Ruban
React native by example by Vadim Ruban
 
Why react matters
Why react mattersWhy react matters
Why react matters
 
React, Redux and es6/7
React, Redux and es6/7React, Redux and es6/7
React, Redux and es6/7
 
Adding where to your ruby apps
Adding where to your ruby appsAdding where to your ruby apps
Adding where to your ruby apps
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Decarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceDecarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational Performance
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 

React Native: Developing an app similar to Uber in JavaScript

  • 1. React Native Developing an app similar to Uber in JavaScript
  • 2. Caio Ariede Full Stack Developer at Parasail.com 2/16/2017 github.com/caioariede
  • 3. Topics ● ECMAScript 6 (es6) ● React ● React Native ● Develop an app similar to Uber
  • 5. ES6: Modules // lib/math.js export function sum (x, y) { return x + y } export var pi = 3.141593 // someApp.js import * as math from "lib/math" console.log("2π = " + math.sum(math.pi, math.pi))
  • 6. ES6: Classes class Circle extends Shape { constructor (id, x, y, radius) { super(id, x, y) this.radius = radius } }
  • 8. React: JSX const element = ( <h1 className="greeting"> Hello, world! </h1> )
  • 9. React: Components class Welcome extends React.Component { render() { return <h1>Welcome, {this.props.name}</h1>; } } // <Welcome name="Fulano" />
  • 10. React: State class Counter extends React.Component { state = {counter: 0} onClick() { this.setState({counter: this.state.counter+1}) } render() { return <div> <span>{this.state.counter}</span> <button onClick={this.onClick}>add</button> </div> } }
  • 14. React Native: Features ● Native apps (native UI components) ● No need to recompile every time ● Reusable code for iOS and Android (80%) ● Communication with native functions ○ Objective-C, Java
  • 16.
  • 17. Idea: App similar to Uber ● Login with Facebook ● Geolocation (passenger) ● Real-time updates (drivers) ● Trace/display route ● Nearest driver Using only JavaScript
  • 19. Getting Started ● npm install -g react-native-cli ● react-native init UberProject ● react-native run-ios
  • 20. Project dependencies ● firebase: backend/database ● react-native-fbsdk: login with facebook ● react-native-maps: native map components ● geofire: location queries ● mapbox: calculate routes
  • 21.
  • 22. Firebase: what's? ● Backend as a service ● Real-time database ● Handles authentication ○ oAuth, Facebook, Google, etc.
  • 24. Login onClick() { LoginManager.logInWithReadPermissions(['public_profile']).then(result => { if (!result.isCancelled) { } else { console.log('login: user cancelled') } }) } onClick() { LoginManager.logInWithReadPermissions(['public_profile']).then(result => { if (!result.isCancelled) { AccessToken.getCurrentAccessToken().then(tokenResult => { return auth.signInWithCredential( facebook.credential(tokenResult.accessToken)) }).catch(err => console.log('login error: ' + err)) } else { console.log('login: user cancelled') } }) }
  • 25. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) ● Real-time updates (drivers) ● Trace/display route ● Nearest driver
  • 26. Map class Map extends Component { state = { passengerPosition: {latitude: 0, longitude: 0}, } render() { return ( <MapView> <Marker coordinate={this.state.passengerPosition} /> </MapView> ) } }
  • 27. watchPassenger() { const positionOptions = { enableHighAccuracy: true, } navigator.geolocation.watchPosition(pos => { this.updatePassengerPosition({latitude: pos.latitude, longitude: pos.longitude}) }, positionOptions) } updatePassengerPosition(passengerPosition) { this.setState({passengerPosition}) } Geolocation
  • 28. Saving location to Firebase updatePassengerPosition(passengerPosition) { this.setState({passengerPosition}) const user = firebase.database().ref('users/' + this.userId) user.update({passengerPosition}) }
  • 29. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) ● Trace/display route ● Nearest driver
  • 30. Real-time updates of drivers watchDrivers() { firebase.database().ref('drivers').on('child_changed', data => { let drivers = this.state.drivers drivers[driver.id] = {id: data.key, position} this.setState({drivers}) }) }
  • 31. Displaying drivers on map renderDrivers() { return this.state.drivers.map(driver => ( <Marker key={driver.id} coordinate={driver.position} image={carIcon} /> )) }
  • 32. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route ● Nearest driver
  • 33. Destination class SetDestination extends MapMixin { constructor(props) { this.state.destinationPosition = randomPosition( props.passengerPosition, 500) // 500 meters } renderDestinationPosition() { return <Marker draggable image={markerIcon} coordinate={this.state.destinationPosition} /> } }
  • 34. Trace route calculateRoute() { const mode = 'driving' const origin = buildLngLat(this.state.pickupPosition) const destination = buildLngLat(this.state.destinationPosition) const accessToken = this.mapBoxAccessToken const url = buildMapBoxUrl(mode, origin, destination, accessToken) fetch(url).then(response => response.json()).then(json => { this.setState({route: getCoordinates(json)}) }).catch(e => { console.warn(e) }) }
  • 35. Display route renderRoute() { return ( <MapView.Polyline strokeWidth={4} coordinates={[this.state.passengerPosition, ...this.state.route, this.state.destinationPosition]} /> ) }
  • 36. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route √ ● Nearest driver
  • 37. GeoFire geofire key1: 37,-122 key2: lat, lng key3: lat, lng geoFire.set("key1", [37, -122]) listener geoquery lat, lng raio geoquery lat, lng raio Notify current geoqueries
  • 38. Nearest driver let radius = 0.1 // 100m let currentLocation = [ passengerPosition.latitude, passengerPosition.longitude, ] let geoQuery = this.geoFire.query({center: currentLocation, radius}) let driversFound = [] geoQuery.on('key_entered', (key, location, distance) => { driversFound.push({key, location, distance}) }) watchDriversFound()
  • 39. Nearest driver watchDriversFound() { if (driversFound.length === 0) { geoQuery.updateCriteria({radius: radius + 0.1}) } else { let minDistance = -1, nearestDriver = null driversFound.forEach(driver => { if (driver.distance < minDistance || minDistance === -1) minDistance = driver.distance, nearestDriver = driver }) this.setState({nearestDriver: driver}) } }
  • 40. Idea: App similar to Uber ● Login with Facebook √ ● Geolocation (passenger) √ ● Real-time updates (drivers) √ ● Trace/display route √ ● Nearest driver √