Documentos de Académico
Documentos de Profesional
Documentos de Cultura
paso a paso
Ágil de implementar y potente, la combinación de React y Firebase
acelerará enormemente el desarrollo de su aplicación.
Wellington Oliveira Dos Santos Seguir
14 de marzo de 2018 · 15 min de lectura
Sabemos desde hace tiempo que React ha sido la bola del día en
el mundo de JavaScript, incluso con un alcance muy
limitado en comparación con Angular o Vue, esta biblioteca se ha destacado por su
facilidad de uso y soporte de una gran comunidad.
Usando React, en este artículo le mostraremos cómo crear una aplicación usando la
herramienta Firebase Backend As A Service ( BaaS ). Esto nos proporciona una base de
datos en tiempo real, autenticación, alojamiento, acelerando enormemente el tiempo de
desarrollo.
Nuestra aplicación contendrá una tabla que muestra información, lo que permite
insertar, editar y eliminar datos de una base de datos en tiempo real de Firebase. Sin
más, vayamos al grano.
r oot
> lecturas
> clave
> {
temperatura:
humedad de flotación: flotador,
cliente: Cadena,
datos: Cadena,
}
Donde clave es una identificación automática creada por Firebase . Cabe mencionar que
la base de datos en tiempo real de Firebase no está escrita, agregamos los tipos para
explicar el comportamiento posterior. Ingrese algunos datos de muestra sin preocuparse
por uniq_id .
Después de eso, necesitamos un paso especial: configurar las reglas de acceso al banco.
Vaya a Base de datos> Reglas y agregue las siguientes reglas:
{
"reglas": {
".read": verdadero,
".write": verdadero
}
}
crear-reaccionar-aplicación aplicación de
CD my-app /
npm start
Ahora que hemos tenido el placer de ver una aplicación React ejecutándose, echemos un
vistazo más de cerca a su organización y arquitectura. Inicialmente veremos la siguiente
estructura de carpetas:
my-app /
- public /
- index.html
- favicon.ico
- manifest.json
- src /
- App.css
- App.js
- App.test.js
- index.css
- index.js
- logo.svg
- registerServiceWorker .js
Eliminaremos los archivos logo.svg, App.css, index.css y sus referencias de código, y
también modificaremos la estructura de la carpeta. Los componentes y sus CSS se
almacenarán en la carpeta de componentes , además crearemos una carpeta útil para
archivos .js que no sean componentes, como se muestra a continuación.
my-app /
- public /
- index.html
- favicon.ico
- manifest.json
- src /
- components /
- App /
- App.js
- App.css
- App.test.js
- util /
- index.js
- index.css
- registerServiceWorker.js
Podemos ver que la plantilla inicial de material-ui para insertar una barra de
aplicaciones es relativamente grande, podemos resaltar que el tema establece el color
rojo como predeterminado para la aplicación, y sí, por supuesto, esto se puede cambiar .
Por lo tanto, tenemos el siguiente resultado mostrado en nuestro navegador:
Nuestra increíble barra superior roja.
Este componente se propone como una lista de elementos llamados datos , donde cada
elemento es un objeto de la forma:
{
clave,
temperatura,
humedad,
cliente,
fecha
}
Con esto ya tenemos una tabla, y ahora solo falta su contenido. Para esto, necesitaremos
agregar esta información en el estado del componente de la aplicación . Como esta
información vendrá de firebase, hagámosla estática al agregar inicialmente el siguiente
código dentro de la aplicación .
estado = {
datos: [
{
clave: 'clave clave de prueba',
temperatura: 'temperatura clave de prueba',
humedad: 'humedad clave de prueba',
cliente: 'cliente clave de prueba',
datos: 'datos clave de prueba',
}
]
} ;
render () {
return (
<MuiThemeProvider theme = {theme}>
<React.Fragment>
<AppBar position = "static">
<Toolbar>
<Tipografía tipo = "title" color = "heredar">
Mi aplicación Awesome React
</ Typography >
</Toolbar>
</AppBar>
<DataTable data = { this .state.data} />
</React.Fragment>
</MuiThemeProvider>
);
}
Y nuestra aplicación ya es más palpable, pero sigue siendo una lista estática como la
imagen a continuación:
Practicidad y pulcritud con el componente de tabla Material-ui.
Recuerde esas credenciales que se mencionaron allí en el paso cero, por lo que las
necesitamos ahora. Crearemos un archivo llamado firebaseUtils.js dentro de la carpeta
./utils y agregaremos el siguiente contenido a continuación. Después de eso,
agregaremos nuestras credenciales dentro de la variable de configuración.
const config = {
apiKey: "**************************",
authDomain: "************ ************** ",
databaseURL:" ************************** ",
projectId:" ************************** ",
almacenamientoBucket:" ******************* ******* ",
messagingSenderId:" ************************** "
};
Entonces, con un poco más de cuidado, separaremos los accesos de Firebase dentro de
una capa de Servicio, creando un archivo llamado FirebaseService.js dentro del directorio
./services/. Inicialmente crearemos un método para recuperar toda la información de un
nodo de base de datos de Firebase dado.
retorno ;
};
Este método devolverá la lista mediante una devolución de llamada al método setState
de nuestra clase de aplicación . Tenga en cuenta que el método toma como parámetros
una ruta al nodo nodePath , una función de devolución de llamada y el límite de
tamaño para la lista de tamaños con un valor predeterminado de diez elementos.
estado = {
datos: []
};
componentDidMount () {
FirebaseService.getDataList ('reads', (dataReceived) => this
.setState ({data: dataReceived}))
}
Donde lecturas es nuestro nodo de búsqueda de base de datos, pronto enumerará los
últimos diez elementos de este nodo. Pero no tenemos diez elementos en nuestra base de
datos, en realidad no tenemos nada, por lo que tendríamos que ingresar una gran
cantidad de datos en nuestra mano; o cree una función para insertar a través de la
pantalla en nuestra aplicación, y esto es lo que haremos en el siguiente paso.
Paso 5: React-Router
Nuestra aplicación tiene exactamente una pantalla, y queremos crear una más para
ingresar datos en nuestra base de datos. El Reaccionar solos no proporcionan una
herramienta de enrutamiento, por lo que vamos a instalar el router reaccionar en la
última versión:
Y luego comience la implementación del enrutador, creemos un archivo urlUtils.js con las
URL que estarán presentes en el sistema y que serán visibles en una pantalla en el futuro.
ReactDOM.render (
<Router>
<Ruta de ruta = {urls.home.path} component = {App} />
</Router>
, documento.
registerServiceWorker ();
Con esta declaración, estamos explicando una ruta al componente App.js, accediendo a
la ruta '/', el sistema mostrará el componente dentro. Cuando subimos al sistema
podemos ver el comportamiento mencionado anteriormente, pero al ingresar '/ data' no
se muestra nada. Entonces dentro del render agregaremos las siguientes rutas donde
teníamos <DataTable />
<Estilo de tarjeta = {{margen: '50px'}}>
<Contenido de la tarjeta>
<Ruta de
ruta exacta = {urls.home.path}
render = {(props) => <Bienvenido {... props} />}
/>
<Ruta de
ruta exacta = {urls.data.path}
render = {(props) =>
<DataTable {... props} data = { this .state.data}
/>}
/>
<Ruta de
ruta exacta = {urls. add.path}
render = {(props) =>
<Agregar {... props} />}
/>
</CardContent>
</Card>
key = {index}
component = {props =>
<Enlace a = {url.path} {... props}
/>
}
>
{url.name}
</Button>
})
}
</React.Fragment>
)
} ;
Relativamente simple, asignamos los valores de URL a botones que contienen enlaces a
sus páginas. También extraeremos el componente AppBar de la aplicación y lo
insertaremos en el nuevo archivo TopBar.js.
importar {urls} desde "../../utils/urlUtils";
importar {AppBar, IconButton, Toolbar, Typography} desde "material-
ui";
importar MenuIcon desde "material-ui-icons / Menu";
importar Reaccionar desde "reaccionar";
importar {Link} desde "react-router-dom";
</IconButton>
</Toolbar>
</AppBar>;
Paso 6: Insertar
Para el componente Agregar , crearemos un componente para ingresar datos
directamente a través de la pantalla, por lo que agregaremos el siguiente contenido en
Add.js:
};
.input-field {
clear: left;
flotador: izquierda;
ancho: 100%;
pantalla: bloque en línea;
margen superior: 2vh ! importante ;
}
Ahora que hemos creado el cuerpo para la nueva pantalla de datos, debemos incluir una
forma de insertarlo en nuestro FirebaseService , agreguemos el método pushData que ya
se estaba utilizando en Add.js :
Este método inserta un nodo hijo con la trayectoria de nodo dentro del banco Firebase.
Ahora podemos probar la inserción, con la ayuda de material-ui, el resultado fue muy
satisfactorio:
return <React.Fragment>
<Typography variant = "headline" component = "h2"> Datos
</Typography>
<Tabla seleccionable = "false">
<TableHead>
<TableRow>
Paso 8: Edición
Para editar, agregaremos otro botón en la tabla con un enlace para editar:
Estas son URL que no queremos agregar al componente de Bienvenida, pero son
necesarias en otro lugar.
Luego modificaremos el componente Agregar para que reciba como parámetro por url la
identificación de un elemento bancario, cargue este elemento y muestre la información
si el archivo existe, a continuación se muestra el archivo resultante:
componentWillMount = () => {
const {id} = this .props. match.params;
};
deje objToSubmit = {
temperatura,
humedad,
fecha,
cliente
};
};
render = () => {
return(<React.Fragment>
<Ruta de
ruta exacta = {privateUrls.edit.path}
render = {(props) => <Agregar {... props} />}
/>
En este punto, podríamos tomar nuestro trabajo como completo, pero agreguemos un
requisito de seguridad antes de comenzar la fase final: usar pruebas automatizadas.
ReactDOM.render (
<Router>
<App />
</Router>, div);
ReactDOM.unmountComponentAtNode (div) ;
});
Para verificar que se ejecuta correctamente, ejecute el comando npm run test
Dado que nuestra aplicación se ejecuta perfectamente sin errores, podemos ponerla en
producción.
const prodConfig = {
apiKey: "***************",
authDomain: "***************",
databaseURL: "*** ************ ",
projectId:" *************** ",
almacenamientoBucket:" ************* ** ",
messagingSenderId:" *************** "
};
const devConfig = {
apiKey: "***************",
authDomain: "***************",
databaseURL: "*** ************ ",
projectId:" *************** ",
almacenamientoBucket:" ************* ** ",
messagingSenderId:" *************** "
};
Esto nos permite usar una credencial para la producción y otra para el desarrollo. El
script de compilación create-react-app selecciona la variable de entorno NODE_ENV
para la producción automáticamente.
En este paso, también debe configurar sus reglas de acceso bancario para tener la menor
seguridad en nuestra aplicación. Como no implementamos autenticación, y nuestra
aplicación es solo una demostración; Dejemos las reglas públicas y omita este paso. Por
supuesto, en producción esto no es aconsejable.
Por último, tenemos la tarea de desplegar nuestra aplicación dentro del hosting Firebase.
Relativamente simple, necesitamos construir el proyecto. Firebase proporciona una
herramienta de configuración e implementación. Por lo tanto, es necesario instalar esta
herramienta a través de npm :
npm install -g firebase-tools
{
"hosting": {
"public": "build",
"ignore": [
"firebase.json",
"** /. *",
"** / node_modules / **"
],
"reescribe": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
Y luego desplegar :
despliegue de firebase
Aparecerá un mensaje de éxito y un enlace a su aplicación, inicie sesión y asegúrese de
que todo esté bien.
Si tiene un cierto aprecio por la pereza, le recomiendo automatizar estos dos comandos
agregándolos a los scripts package.json . Agregaremos la siguiente línea dentro de los
scripts:
. . .
Después de todo este trabajo, tenemos una aplicación React + Firebase completa que se
ejecuta directamente en el servidor Firebase y con respuesta en tiempo real con la base
de datos.
El proyecto completo está disponible para pruebas en línea aquí y su código aquí .
Siéntase libre de hacer preguntas o simplemente chatear sobre tecnologías y otras
locuras en alguna red social .
Para ustedes que han llegado hasta aquí, muchas gracias y nos vemos en el próximo
artículo. 😄
Gracias a delki8 .