SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à Workshop React + Firebase | T3chFest 2017

Práctica web de la sesión 10.pptx
Práctica web de la sesión 10.pptxPráctica web de la sesión 10.pptx
Práctica web de la sesión 10.pptxDARWINALEXISGUTIERRE
 
Integra tu Aplicación Android con Firebase
Integra tu Aplicación Android con FirebaseIntegra tu Aplicación Android con Firebase
Integra tu Aplicación Android con FirebaseArmando Picón Z.
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxLuis775803
 
Firebase + Android, incendiando el backend de tus apps móviles con Firebase
Firebase + Android, incendiando el backend de tus apps móviles con FirebaseFirebase + Android, incendiando el backend de tus apps móviles con Firebase
Firebase + Android, incendiando el backend de tus apps móviles con FirebaseYury Camacho
 
Web matrix session2
Web matrix session2Web matrix session2
Web matrix session2Gonzalo C.
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Gabriela Bosetti
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Seguridad en WordPress con WPHardening
Seguridad en WordPress con WPHardeningSeguridad en WordPress con WPHardening
Seguridad en WordPress con WPHardeningDaniel Maldonado
 
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...Ivan Petrlik
 
Almacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioAlmacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioANGELLEON93
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008Mitusin
 
Entendiendo Yii - Flisol 2016
Entendiendo Yii - Flisol 2016Entendiendo Yii - Flisol 2016
Entendiendo Yii - Flisol 2016Plattinux
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWTGDG Lima
 

Similaire à Workshop React + Firebase | T3chFest 2017 (20)

Práctica web de la sesión 10.pptx
Práctica web de la sesión 10.pptxPráctica web de la sesión 10.pptx
Práctica web de la sesión 10.pptx
 
Cv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-webCv dennys-jose-marquez-reyes-desarrollador-web
Cv dennys-jose-marquez-reyes-desarrollador-web
 
Scraping the web with python
Scraping the web with pythonScraping the web with python
Scraping the web with python
 
Integra tu Aplicación Android con Firebase
Integra tu Aplicación Android con FirebaseIntegra tu Aplicación Android con Firebase
Integra tu Aplicación Android con Firebase
 
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptxEvolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
Evolution INTech - Acceso a bases de datos con Minimal APIs de .NET 6.pptx
 
De HTML a Express
De HTML a ExpressDe HTML a Express
De HTML a Express
 
Firebase + Android, incendiando el backend de tus apps móviles con Firebase
Firebase + Android, incendiando el backend de tus apps móviles con FirebaseFirebase + Android, incendiando el backend de tus apps móviles con Firebase
Firebase + Android, incendiando el backend de tus apps móviles con Firebase
 
Web matrix session2
Web matrix session2Web matrix session2
Web matrix session2
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Ajax Huancayo
Ajax HuancayoAjax Huancayo
Ajax Huancayo
 
Firebase: Backend en la nube
Firebase: Backend en la nubeFirebase: Backend en la nube
Firebase: Backend en la nube
 
Seguridad en WordPress con WPHardening
Seguridad en WordPress con WPHardeningSeguridad en WordPress con WPHardening
Seguridad en WordPress con WPHardening
 
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...GUIA DE  LABORATORIO  PHONE GAP JQUERY  MOBILE  CARGADO DE_DATOS_DE_REGISTROS...
GUIA DE LABORATORIO PHONE GAP JQUERY MOBILE CARGADO DE_DATOS_DE_REGISTROS...
 
Almacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudioAlmacenar Datos En Firebase con AndroidStudio
Almacenar Datos En Firebase con AndroidStudio
 
Curso de HTML5
Curso de HTML5Curso de HTML5
Curso de HTML5
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008
 
Entendiendo Yii - Flisol 2016
Entendiendo Yii - Flisol 2016Entendiendo Yii - Flisol 2016
Entendiendo Yii - Flisol 2016
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
Mi primera app con GAE y GWT
Mi primera app con GAE y GWTMi primera app con GAE y GWT
Mi primera app con GAE y GWT
 

Plus de Carlos Azaustre

Introducción al JAMStack - JS Ourense
Introducción al JAMStack - JS OurenseIntroducción al JAMStack - JS Ourense
Introducción al JAMStack - JS OurenseCarlos Azaustre
 
Serverless with Firebase - Launchpad Build Burgos
Serverless with Firebase - Launchpad Build Burgos Serverless with Firebase - Launchpad Build Burgos
Serverless with Firebase - Launchpad Build Burgos Carlos Azaustre
 
Your First Assistant App with DialogFlow + Firebase
Your First Assistant App with DialogFlow + FirebaseYour First Assistant App with DialogFlow + Firebase
Your First Assistant App with DialogFlow + FirebaseCarlos Azaustre
 
PixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIs
PixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIsPixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIs
PixelsCamp 2017 - Cloud Functions for Firebase and Machine Learning APIsCarlos Azaustre
 
Prototipado de Aplicaciones web con Firebase #CampusGivers
Prototipado de Aplicaciones web con Firebase #CampusGiversPrototipado de Aplicaciones web con Firebase #CampusGivers
Prototipado de Aplicaciones web con Firebase #CampusGiversCarlos Azaustre
 
Hack2Progress - Consejos para afrontar un Hackathon
Hack2Progress - Consejos para afrontar un HackathonHack2Progress - Consejos para afrontar un Hackathon
Hack2Progress - Consejos para afrontar un HackathonCarlos Azaustre
 
Hack2Progress - Desarrollando una aplicación web con AngularJS
Hack2Progress - Desarrollando una aplicación web con AngularJSHack2Progress - Desarrollando una aplicación web con AngularJS
Hack2Progress - Desarrollando una aplicación web con AngularJSCarlos Azaustre
 
Angular 2 is Coming - GDG DevFest Cordoba 2015
Angular 2 is Coming - GDG DevFest Cordoba 2015Angular 2 is Coming - GDG DevFest Cordoba 2015
Angular 2 is Coming - GDG DevFest Cordoba 2015Carlos Azaustre
 
Taller de Seo y Facebook Ads
Taller de Seo y Facebook AdsTaller de Seo y Facebook Ads
Taller de Seo y Facebook AdsCarlos Azaustre
 
Game of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCCGame of Frameworks - GDG Cáceres #CodeCC
Game of Frameworks - GDG Cáceres #CodeCCCarlos Azaustre
 
Curso Básico de AngularJS
Curso Básico de AngularJSCurso Básico de AngularJS
Curso Básico de AngularJSCarlos Azaustre
 
#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScript#PlatziConf - El camino para ser un Pro en JavaScript
#PlatziConf - El camino para ser un Pro en JavaScriptCarlos Azaustre
 
Login social con node.js
Login social con node.jsLogin social con node.js
Login social con node.jsCarlos Azaustre
 
Chefly: Pitch for Tetuan Valley Startup School
Chefly: Pitch for Tetuan Valley Startup SchoolChefly: Pitch for Tetuan Valley Startup School
Chefly: Pitch for Tetuan Valley Startup SchoolCarlos Azaustre
 
Nuestra experiencia emprendedora
Nuestra experiencia emprendedoraNuestra experiencia emprendedora
Nuestra experiencia emprendedoraCarlos Azaustre
 

Plus de Carlos Azaustre (16)

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

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