SlideShare una empresa de Scribd logo
9 y 10 de febrero
#T3chFest2017
Workshop
Integrando Firebase con React.js
Carlos Azaustre
Chefly
9 y 10 de febrero
#T3chFest2017
Sobre mi
Carlos Azaustre
@carlosazaustre
Ingeniero en Telemática / UC3M
> Desarrollador Web (JS, React, Node)
> CTO y Cofundador de Chefly
> Tech Blogger y Formador en carlosazaustre.es
> JavaScript Nerd
9 y 10 de febrero
#T3chFest2017
¿Qué es Firebase?
Infraestructura y conjunto de herramientas
para ayudarnos a construir aplicaciones web
y móviles
● Base de datos realtime
● Autenticación
● Cloud Messaging
● Storage
● Hosting
● etc…
firebase.google.com
9 y 10 de febrero
#T3chFest2017
¿Qué es React.js?
Librería JavaScript creada por Facebook para
el desarrollo de interfaces.
Permite modularizar el desarrollo en
componentes.
Ecosistema y comunidad muy amplios.
facebook.github.io/react
9 y 10 de febrero
#T3chFest2017
create-app-react
Generador oficial de Facebook para iniciar un
app React rápidamente
Incluye:
● Scaffolding
● Transpiladores y empaquetador (webpack)
● Testing
● Linter
github.com/facebookincubator/create-react-app
9 y 10 de febrero
#T3chFest2017
create-app-react
9 y 10 de febrero
#T3chFest2017
create-app-react
$ npm install -g create-app-react
$ create-app-react
react-firebase-t3chfest
...
$ cd react-firebase-t3chfest
curl -o- -L https://yarnpkg.com/install.sh | bash
Recomendado: Instalar Yarn
9 y 10 de febrero
#T3chFest2017
create-app-react
$ npm install -g create-app-react
$ create-app-react
react-firebase-t3chfest
...
$ cd react-firebase-t3chfest
curl -o- -L https://yarnpkg.com/install.sh | bash
Recomendado: Instalar Yarn
9 y 10 de febrero
#T3chFest2017
create-app-react
$ yarn add react react-dom
$ npm start
curl -o- -L https://yarnpkg.com/install.sh | bash
Recomendado: Instalar Yarn
9 y 10 de febrero
#T3chFest2017
Crear un Proyecto en Firebase
9 y 10 de febrero
#T3chFest2017
Crear un Proyecto en Firebase
9 y 10 de febrero
#T3chFest2017
Crear un Proyecto en Firebase
9 y 10 de febrero
#T3chFest2017
Crear un Proyecto en Firebase
9 y 10 de febrero
#T3chFest2017
Crear un Proyecto en Firebase
9 y 10 de febrero
#T3chFest2017
Configurar Firebase en React.js
$ yarn add firebase
9 y 10 de febrero
#T3chFest2017
import React from 'react';
import ReactDOM from 'react-dom';
import firebase from 'firebase';
import App from './App';
import './index.css';
firebase.initializeApp({
apiKey: "AIzaSyA2r-MouLjwaR7KUyMRi8K5OCED1bE7BAw",
authDomain: "t3chfest-b3577.firebaseapp.com",
databaseURL: "https://t3chfest-b3577.firebaseio.com",
storageBucket: "t3chfest-b3577.appspot.com",
messagingSenderId: "714780734095"
});
ReactDOM.render(
<App />,
document.getElementById('root')
);
src/index.js
9 y 10 de febrero
#T3chFest2017
Añadir autenticación
9 y 10 de febrero
#T3chFest2017
Añadir autenticación
9 y 10 de febrero
#T3chFest2017
Añadir autenticación
Métodos a utilizar
https://firebase.google.com/docs/auth/web/manage-users
firebase.auth().onAuthStateChanged()
firebase.auth().signOut()
https://firebase.google.com/docs/auth/web/google-signin
firebase.auth.GoogleAuthProvider
firebase.auth().signInWithPopup(provider)
9 y 10 de febrero
#T3chFest2017
…
import firebase from 'firebase';
class App extends Component {
constructor () {
super();
this.state = { user: null };
this.handleAuth = this.handleAuth.bind(this);
}
componentWillMount () {
firebase.auth().onAuthStateChanged(user => {
this.setState({ user });
});
}
handleAuth () {
const provider = new Firebase.auth.GoogleProvider();
firebase.auth().signInWithPopup(provider)
.then(result => console.log(`${result.user.email} ha iniciado sesión`))
.catch(error => console.log(`Error ${error.code}: ${error.message}`));
}
...
}
src/App.js
9 y 10 de febrero
#T3chFest2017
…
render () {
return (
…
<button onClick={this.handleAuth} className="App-btn">
Iniciar sesión con Google
</button>
);
}
}
src/App.js
9 y 10 de febrero
#T3chFest2017
Firebase Storage
9 y 10 de febrero
#T3chFest2017
Añadir Firebase Storage
Métodos a utilizar
https://firebase.google.com/docs/storage/web/create-reference
firebase.storage().ref(URL)
firebase.storage().ref(URL).put(FILE)
9 y 10 de febrero
#T3chFest2017
import React, { Component } from 'react';
import firebase from 'firebase';
class FileUpload extends Component {
constructor () {
super();
this.state = {
uploadValue: 0
};
this.handleOnChange =
this.handleOnChange.bind(this);
}
handleOnChange (event) {
const file = event.target.files[0];
const storageRef =
firebase.storage().ref(`fotos/${file.name}`);
const taks = storageRef.put(file);
}
render () {
return (
<div>
<progress value={this.state.uploadValue} max='100'>
{this.state.uploadValue} %
</progress>
<br/>
<input type="file" onChange={this.handleOnChange}
/>
<br/>
<img width="320" src={this.state.picture} alt=""/>
</div>
)
}
}
export default FileUpload;
src/FileUpload.js
9 y 10 de febrero
#T3chFest2017
Añadir Firebase Storage
9 y 10 de febrero
#T3chFest2017
Añadir Firebase Storage
9 y 10 de febrero
#T3chFest2017
Almacenar en Firebase Database
Métodos a utilizar
https://firebase.google.com/docs/database/web/start
firebase.database().ref(URL)
firebase.database().ref(URL).push()
.set(FILE)
firebase.database().on(LISTENER)
9 y 10 de febrero
#T3chFest2017
Almacenar en Firebase Database
9 y 10 de febrero
#T3chFest2017
Almacenar en Firebase Database
9 y 10 de febrero
#T3chFest2017
task.on('state_changed', snapshot => {
let percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
this.setState({
uploadValue: percentage
})
}, error => {
// Ocurre un error
console.error(error.message);
}, () => {
const pictureUpload = task.snapshot.downloadURL;
const dbRef = firebase.database().ref('pictures');
const newPicture = dbRef.push();
newPicture.set(pictureUpload);
});
}
src/App.js
9 y 10 de febrero
#T3chFest2017
componentWillMount () {
firebase.auth().onAuthStateChanged(user => {
this.setState({ user });
});
firebase.database().ref('pictures').on('child_added', snapshot => {
this.setState({
pictures: this.state.pictures.concat(snapshot.val())
});
});
}
src/App.js
9 y 10 de febrero
#T3chFest2017
$ npm run build // Optimización para producción
$ npm install -g firebase-tools
$ firebase login
$ firebase init
> Hosting: Configure and Deploy Firebase Hosting sites
> ? What Firebase project do you want to associate as default
> ? Public directory (build)
> ? Configure as SPA
BONUS: Firebase Hosting
Crea los ficheros .firebaserc y firebase.json con información de configuración de
nuestro proyecto
$ firebase deploy
9 y 10 de febrero
#T3chFest2017
BONUS: Firebase Hosting
9 y 10 de febrero
#T3chFest2017
Gracias!!
Código del Taller
github.com/carlosazaustre/react-firebase-t3chfest
React en 10 Minutos: Guía GRATIS en PDF
carlosazaustre.es/guia-react

Más contenido relacionado

Similar a Workshop React + Firebase | T3chFest 2017 (16)

PPTX
Firebase, la suite completa para convertir tu app en un éxito
Jorge Ventura
 
PDF
Firebase: Backend en la nube
Facundo Rodríguez Arceri
 
PDF
Crear base de datos en FireBase.js .pdf
uriel castellanos paguaga
 
PDF
Firebase + Android, incendiando el backend de tus apps móviles con Firebase
Yury Camacho
 
PPTX
FIREBASE.pptx
IvanFloresPari2
 
PDF
Desarrollando aplicaciones iOS con datos en tiempo real con Firebase y Swift
Software Guru
 
PDF
SG Desarrollando Aplicaciones iOS con Datos en Tiempo Real con Firebase y Swift
Carlos J. Brito Abundis
 
PDF
Appcircus Academy: Integración de Social Media en Android
Alberto Ruibal
 
PDF
Microservicios, en qué lío me he metido
Ernesto Hernández Rodríguez
 
PDF
Tutorial de ReactJS.pdf completo para principiantes
Ainara347314
 
PPTX
UNTAGGED.DAY #1 . Seguimiento de aplicaciones con Firebase_GA4
thyngster
 
PPTX
Presentacion de proyecto interciclo
Edwin Narváez
 
PDF
Node js mongo crud tareas
LeocadioCruzGarcia
 
PPTX
Desarrollo Back-end Con React y node.pptx
AudisMunive
 
PPTX
Tecnologías detrás de las Redes Sociales
Carmen Salinas Zavala
 
PDF
Construyendo una app Android sobre la nube App Engine
GDG Lima
 
Firebase, la suite completa para convertir tu app en un éxito
Jorge Ventura
 
Firebase: Backend en la nube
Facundo Rodríguez Arceri
 
Crear base de datos en FireBase.js .pdf
uriel castellanos paguaga
 
Firebase + Android, incendiando el backend de tus apps móviles con Firebase
Yury Camacho
 
FIREBASE.pptx
IvanFloresPari2
 
Desarrollando aplicaciones iOS con datos en tiempo real con Firebase y Swift
Software Guru
 
SG Desarrollando Aplicaciones iOS con Datos en Tiempo Real con Firebase y Swift
Carlos J. Brito Abundis
 
Appcircus Academy: Integración de Social Media en Android
Alberto Ruibal
 
Microservicios, en qué lío me he metido
Ernesto Hernández Rodríguez
 
Tutorial de ReactJS.pdf completo para principiantes
Ainara347314
 
UNTAGGED.DAY #1 . Seguimiento de aplicaciones con Firebase_GA4
thyngster
 
Presentacion de proyecto interciclo
Edwin Narváez
 
Node js mongo crud tareas
LeocadioCruzGarcia
 
Desarrollo Back-end Con React y node.pptx
AudisMunive
 
Tecnologías detrás de las Redes Sociales
Carmen Salinas Zavala
 
Construyendo una app Android sobre la nube App Engine
GDG Lima
 

Más de Carlos Azaustre (17)

PDF
Introducción al JAMStack - JS Ourense
Carlos Azaustre
 
PDF
Serverless with Firebase - Launchpad Build Burgos
Carlos Azaustre
 
PDF
Your First Assistant App with DialogFlow + Firebase
Carlos Azaustre
 
PDF
PixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIs
Carlos Azaustre
 
PDF
Prototipado de Aplicaciones web con Firebase #CampusGivers
Carlos Azaustre
 
PPTX
Hack2Progress - Consejos para afrontar un Hackathon
Carlos Azaustre
 
PDF
Hack2Progress - Desarrollando una aplicación web con AngularJS
Carlos Azaustre
 
PDF
Angular 2 is Coming - GDG DevFest Cordoba 2015
Carlos Azaustre
 
PDF
Taller de Seo y Facebook Ads
Carlos Azaustre
 
PDF
Game of Frameworks - GDG Cáceres #CodeCC
Carlos Azaustre
 
PDF
Curso Básico de AngularJS
Carlos Azaustre
 
PDF
Curso de HTML5
Carlos Azaustre
 
PDF
Chefly Keynote at ETSII
Carlos Azaustre
 
PDF
#PlatziConf - El camino para ser un Pro en JavaScript
Carlos Azaustre
 
PDF
Login social con node.js
Carlos Azaustre
 
PDF
Chefly: Pitch for Tetuan Valley Startup School
Carlos Azaustre
 
PDF
Nuestra experiencia emprendedora
Carlos Azaustre
 
Introducción al JAMStack - JS Ourense
Carlos Azaustre
 
Serverless with Firebase - Launchpad Build Burgos
Carlos Azaustre
 
Your First Assistant App with DialogFlow + Firebase
Carlos Azaustre
 
PixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIs
Carlos Azaustre
 
Prototipado de Aplicaciones web con Firebase #CampusGivers
Carlos Azaustre
 
Hack2Progress - Consejos para afrontar un Hackathon
Carlos Azaustre
 
Hack2Progress - Desarrollando una aplicación web con AngularJS
Carlos Azaustre
 
Angular 2 is Coming - GDG DevFest Cordoba 2015
Carlos Azaustre
 
Taller de Seo y Facebook Ads
Carlos Azaustre
 
Game of Frameworks - GDG Cáceres #CodeCC
Carlos Azaustre
 
Curso Básico de AngularJS
Carlos Azaustre
 
Curso de HTML5
Carlos Azaustre
 
Chefly Keynote at ETSII
Carlos Azaustre
 
#PlatziConf - El camino para ser un Pro en JavaScript
Carlos Azaustre
 
Login social con node.js
Carlos Azaustre
 
Chefly: Pitch for Tetuan Valley Startup School
Carlos Azaustre
 
Nuestra experiencia emprendedora
Carlos Azaustre
 
Publicidad

Último (8)

PPTX
sistemas información caracteríaticas-1.pptx
forozco17fo2
 
PPTX
Presentacion Python en Microbit (Primeros pasos)
rcamilot
 
PDF
Variacion ciclica .pdf untumbes estadística
130021222
 
PPT
Firewalls_tema_de_tecnoligias_de_la.I.ppt
70634804
 
PPTX
LAD-Presentation - Architectural Fitness Function - Nico & Grego.pptx
Nicolas Ricardo Archila Gomez
 
PPT
ONSULTA A PARTIR DE MULTIPLES TABLAS .ppt
42982335
 
PPTX
Tema6 estructuras condicionales básicas pseint.pptx
lmcsenatic
 
PDF
AU-COMO INICIAR SESIÓN EN ANYDESK CON CRTL+ALT+SUP DESHABILITADO.pdf
Serviciojat
 
sistemas información caracteríaticas-1.pptx
forozco17fo2
 
Presentacion Python en Microbit (Primeros pasos)
rcamilot
 
Variacion ciclica .pdf untumbes estadística
130021222
 
Firewalls_tema_de_tecnoligias_de_la.I.ppt
70634804
 
LAD-Presentation - Architectural Fitness Function - Nico & Grego.pptx
Nicolas Ricardo Archila Gomez
 
ONSULTA A PARTIR DE MULTIPLES TABLAS .ppt
42982335
 
Tema6 estructuras condicionales básicas pseint.pptx
lmcsenatic
 
AU-COMO INICIAR SESIÓN EN ANYDESK CON CRTL+ALT+SUP DESHABILITADO.pdf
Serviciojat
 
Publicidad

Workshop React + Firebase | T3chFest 2017

  • 1. 9 y 10 de febrero #T3chFest2017 Workshop Integrando Firebase con React.js Carlos Azaustre Chefly
  • 2. 9 y 10 de febrero #T3chFest2017 Sobre mi Carlos Azaustre @carlosazaustre Ingeniero en Telemática / UC3M > Desarrollador Web (JS, React, Node) > CTO y Cofundador de Chefly > Tech Blogger y Formador en carlosazaustre.es > JavaScript Nerd
  • 3. 9 y 10 de febrero #T3chFest2017 ¿Qué es Firebase? Infraestructura y conjunto de herramientas para ayudarnos a construir aplicaciones web y móviles ● Base de datos realtime ● Autenticación ● Cloud Messaging ● Storage ● Hosting ● etc… firebase.google.com
  • 4. 9 y 10 de febrero #T3chFest2017 ¿Qué es React.js? Librería JavaScript creada por Facebook para el desarrollo de interfaces. Permite modularizar el desarrollo en componentes. Ecosistema y comunidad muy amplios. facebook.github.io/react
  • 5. 9 y 10 de febrero #T3chFest2017 create-app-react Generador oficial de Facebook para iniciar un app React rápidamente Incluye: ● Scaffolding ● Transpiladores y empaquetador (webpack) ● Testing ● Linter github.com/facebookincubator/create-react-app
  • 6. 9 y 10 de febrero #T3chFest2017 create-app-react
  • 7. 9 y 10 de febrero #T3chFest2017 create-app-react $ npm install -g create-app-react $ create-app-react react-firebase-t3chfest ... $ cd react-firebase-t3chfest curl -o- -L https://yarnpkg.com/install.sh | bash Recomendado: Instalar Yarn
  • 8. 9 y 10 de febrero #T3chFest2017 create-app-react $ npm install -g create-app-react $ create-app-react react-firebase-t3chfest ... $ cd react-firebase-t3chfest curl -o- -L https://yarnpkg.com/install.sh | bash Recomendado: Instalar Yarn
  • 9. 9 y 10 de febrero #T3chFest2017 create-app-react $ yarn add react react-dom $ npm start curl -o- -L https://yarnpkg.com/install.sh | bash Recomendado: Instalar Yarn
  • 10. 9 y 10 de febrero #T3chFest2017 Crear un Proyecto en Firebase
  • 11. 9 y 10 de febrero #T3chFest2017 Crear un Proyecto en Firebase
  • 12. 9 y 10 de febrero #T3chFest2017 Crear un Proyecto en Firebase
  • 13. 9 y 10 de febrero #T3chFest2017 Crear un Proyecto en Firebase
  • 14. 9 y 10 de febrero #T3chFest2017 Crear un Proyecto en Firebase
  • 15. 9 y 10 de febrero #T3chFest2017 Configurar Firebase en React.js $ yarn add firebase
  • 16. 9 y 10 de febrero #T3chFest2017 import React from 'react'; import ReactDOM from 'react-dom'; import firebase from 'firebase'; import App from './App'; import './index.css'; firebase.initializeApp({ apiKey: "AIzaSyA2r-MouLjwaR7KUyMRi8K5OCED1bE7BAw", authDomain: "t3chfest-b3577.firebaseapp.com", databaseURL: "https://t3chfest-b3577.firebaseio.com", storageBucket: "t3chfest-b3577.appspot.com", messagingSenderId: "714780734095" }); ReactDOM.render( <App />, document.getElementById('root') ); src/index.js
  • 17. 9 y 10 de febrero #T3chFest2017 Añadir autenticación
  • 18. 9 y 10 de febrero #T3chFest2017 Añadir autenticación
  • 19. 9 y 10 de febrero #T3chFest2017 Añadir autenticación Métodos a utilizar https://firebase.google.com/docs/auth/web/manage-users firebase.auth().onAuthStateChanged() firebase.auth().signOut() https://firebase.google.com/docs/auth/web/google-signin firebase.auth.GoogleAuthProvider firebase.auth().signInWithPopup(provider)
  • 20. 9 y 10 de febrero #T3chFest2017 … import firebase from 'firebase'; class App extends Component { constructor () { super(); this.state = { user: null }; this.handleAuth = this.handleAuth.bind(this); } componentWillMount () { firebase.auth().onAuthStateChanged(user => { this.setState({ user }); }); } handleAuth () { const provider = new Firebase.auth.GoogleProvider(); firebase.auth().signInWithPopup(provider) .then(result => console.log(`${result.user.email} ha iniciado sesión`)) .catch(error => console.log(`Error ${error.code}: ${error.message}`)); } ... } src/App.js
  • 21. 9 y 10 de febrero #T3chFest2017 … render () { return ( … <button onClick={this.handleAuth} className="App-btn"> Iniciar sesión con Google </button> ); } } src/App.js
  • 22. 9 y 10 de febrero #T3chFest2017 Firebase Storage
  • 23. 9 y 10 de febrero #T3chFest2017 Añadir Firebase Storage Métodos a utilizar https://firebase.google.com/docs/storage/web/create-reference firebase.storage().ref(URL) firebase.storage().ref(URL).put(FILE)
  • 24. 9 y 10 de febrero #T3chFest2017 import React, { Component } from 'react'; import firebase from 'firebase'; class FileUpload extends Component { constructor () { super(); this.state = { uploadValue: 0 }; this.handleOnChange = this.handleOnChange.bind(this); } handleOnChange (event) { const file = event.target.files[0]; const storageRef = firebase.storage().ref(`fotos/${file.name}`); const taks = storageRef.put(file); } render () { return ( <div> <progress value={this.state.uploadValue} max='100'> {this.state.uploadValue} % </progress> <br/> <input type="file" onChange={this.handleOnChange} /> <br/> <img width="320" src={this.state.picture} alt=""/> </div> ) } } export default FileUpload; src/FileUpload.js
  • 25. 9 y 10 de febrero #T3chFest2017 Añadir Firebase Storage
  • 26. 9 y 10 de febrero #T3chFest2017 Añadir Firebase Storage
  • 27. 9 y 10 de febrero #T3chFest2017 Almacenar en Firebase Database Métodos a utilizar https://firebase.google.com/docs/database/web/start firebase.database().ref(URL) firebase.database().ref(URL).push() .set(FILE) firebase.database().on(LISTENER)
  • 28. 9 y 10 de febrero #T3chFest2017 Almacenar en Firebase Database
  • 29. 9 y 10 de febrero #T3chFest2017 Almacenar en Firebase Database
  • 30. 9 y 10 de febrero #T3chFest2017 task.on('state_changed', snapshot => { let percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100; this.setState({ uploadValue: percentage }) }, error => { // Ocurre un error console.error(error.message); }, () => { const pictureUpload = task.snapshot.downloadURL; const dbRef = firebase.database().ref('pictures'); const newPicture = dbRef.push(); newPicture.set(pictureUpload); }); } src/App.js
  • 31. 9 y 10 de febrero #T3chFest2017 componentWillMount () { firebase.auth().onAuthStateChanged(user => { this.setState({ user }); }); firebase.database().ref('pictures').on('child_added', snapshot => { this.setState({ pictures: this.state.pictures.concat(snapshot.val()) }); }); } src/App.js
  • 32. 9 y 10 de febrero #T3chFest2017 $ npm run build // Optimización para producción $ npm install -g firebase-tools $ firebase login $ firebase init > Hosting: Configure and Deploy Firebase Hosting sites > ? What Firebase project do you want to associate as default > ? Public directory (build) > ? Configure as SPA BONUS: Firebase Hosting Crea los ficheros .firebaserc y firebase.json con información de configuración de nuestro proyecto $ firebase deploy
  • 33. 9 y 10 de febrero #T3chFest2017 BONUS: Firebase Hosting
  • 34. 9 y 10 de febrero #T3chFest2017 Gracias!! Código del Taller github.com/carlosazaustre/react-firebase-t3chfest React en 10 Minutos: Guía GRATIS en PDF carlosazaustre.es/guia-react