Los SDK de cliente de Firebase Data Connect te permiten llamar a tus consultas y mutaciones del servidor directamente desde una app de Firebase. Generas un SDK de cliente personalizado en paralelo mientras diseñas los esquemas, las consultas y las mutaciones que implementas en tu Data Connect servicio. Luego, integras métodos de este SDK en tu lógica de cliente.
Como mencionamos en otro lugar, es importante tener en cuenta que el código de cliente no envía las Data Connect consultas y mutaciones, y que estas no se ejecutan en el servidor. En cambio, cuando se implementan, las operaciones Data Connect se almacenan en el servidor como Cloud Functions. Esto significa que debes implementar los cambios correspondientes del cliente para evitar interrumpir a los usuarios existentes (por ejemplo, en versiones anteriores de la app).
Por eso, Data Connect te proporciona un entorno de desarrollo y herramientas que te permiten crear prototipos de tus esquemas, consultas y mutaciones implementados en el servidor. También genera SDKs de cliente automáticamente mientras creas prototipos.
Cuando hayas iterado las actualizaciones de tu servicio y las apps de cliente, las actualizaciones del servidor y del cliente estarán listas para implementarse.
Implementa código de cliente con el Firebase JavaScript SDK
En esta sección, se explica cómo puedes implementar clientes con el Firebase JavaScript SDK.
Si usas React o Angular, consulta las instrucciones de configuración alternativas y los vínculos a la documentación adicional sobre la generación de Data Connect SDKs para frameworks.
Inicializa tu app
Primero, inicializa tu app con la secuencia estándar de Firebase.
initializeApp({...});
Instala el SDK de JavaScript generado
Usa el Firebase CLI para configurar los Data Connect generados SDKs en tus apps.
El comando init debería detectar todas las apps en la carpeta actual y, luego, instalar los SDKs generados automáticamente.
firebase init dataconnect:sdk
Conecta tu app al servicio de Data Connect.
import { connectDataConnectEmulator } from 'firebase/data-connect';
import { connectorConfig } from '@dataconnect/generated';
const dataConnect = getDataConnect(connectorConfig);
// [Optionally] Configure the SDK to use Data Connect local emulator.
connectDataConnectEmulator(dataConnect, 'localhost', 9399);
Actualiza los SDKs mientras creas prototipos
Si tienes instalada la extensión de Data Connect para VS Code, siempre mantendrá actualizados los SDKs generados.
Si no usas la extensión de Data Connect para VS Code, puedes usar Firebase CLI para mantener actualizados los SDKs generados.
firebase dataconnect:sdk:generate --watchGenera SDKs en canalizaciones de compilación
Puedes usar Firebase CLI para generar Data Connect SDKs en procesos de compilación de CI/CD.
firebase dataconnect:sdk:generateImporta las bibliotecas
Se necesitan dos conjuntos de importaciones para inicializar tu código de cliente: importaciones generales Data Connect e importaciones específicas de SDKs generados.
Observa el objeto ConnectorConfig incluido en las importaciones generales.
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// generated queries and mutations from SDK
import { listMovies, ListMoviesResponse, createMovie, connectorConfig } from '@dataconnect/generated';
Usa consultas del SDK de JavaScript
El código generado ya incluirá referencias de consulta predefinidas. Lo único que debes hacer es importarlas y llamar a execute en ellas.
import { executeQuery } from 'firebase/data-connect';
import { listMoviesRef } from '@dataconnect/generated';
const ref = listMoviesRef();
const { data } = await executeQuery(ref);
console.log(data.movies);
Llama a los métodos de consulta del SDK
A continuación, se muestra un ejemplo en el que se usan estas funciones de acceso directo a la acción:
import { listMovies } from '@dataconnect/generated';
function onBtnClick() {
// This will call the generated JS from the CLI and then make an HTTP request out
// to the server.
listMovies().then(data => showInUI(data)); // == executeQuery(listMoviesRef);
}
Suscríbete a los cambios
Puedes suscribirte a los cambios (que se actualizarán cada vez que ejecutes una consulta).
const listRef = listAllMoviesRef();
// subscribe will immediately invoke the query if no execute was called on it previously.
subscribe(listRef, ({ data }) => {
updateUIWithMovies(data.movies);
});
await createMovie({ title: 'Empire Strikes Back', releaseYear: 1980, genre: "Sci-Fi", rating: 5 });\
await listMovies(); // will update the subscription above`
Controla los cambios en los campos de enumeración
El esquema de una app puede contener enumeraciones, a las que pueden acceder tus consultas de GraphQL.
A medida que cambia el diseño de una app, puedes agregar valores admitidos de enumeración nuevos. Por ejemplo, imagina que, más adelante en el ciclo de vida de tu aplicación, decides agregar un valor FULLSCREEN a la enumeración AspectRatio.
En el flujo de trabajo Data Connect, puedes usar herramientas de desarrollo local para actualizar tus consultas y SDKs.
Sin embargo, antes de lanzar una versión actualizada de tus clientes, es posible que los clientes implementados más antiguos se interrumpan.
Ejemplo de implementación resistente
Siempre agrega una rama default a una instrucción switch sobre los valores de enumeración o
una rama else a un bloque if/else if que se compare con los valores de enumeración.
El lenguaje JavaScript/TypeScript no aplica esto, pero es la forma de hacer que el código de cliente sea sólido en caso de que se agreguen valores de enumeración nuevos.
const queryResult = await getOldestMovie();
if (queryResult.data) {
// we can use a switch statement's "default" case to check for unexpected values
const oldestMovieAspectRatio = queryResult.data.originalAspectRatio;
switch (oldestMovieAspectRatio) {
case AspectRatio.ACADEMY:
case AspectRatio.WIDESCREEN:
case AspectRatio.ANAMORPHIC:
console.log('This movie was filmed in Academy, widescreen or anamorphic aspect ratio!');
break;
default:
// the default case will catch FULLSCREEN, UNAVAILABLE or _UNKNOWN
// it will also catch unexpected values the SDK isn't aware of, such as CINEMASCOPE
console.log('This movie was was NOT filmed in Academy, widescreen or anamorphic.');
break;
}
// alternatively, we can check to see if the returned enum value is a known value
if (!Object.values(AspectRatio).includes(oldestMovieAspectRatio)) {
console.log(`Unrecognized aspect ratio: ${oldestAspectRatio}`);
}
} else {
console.log("no movies found!");
}
Usa mutaciones del SDK de JavaScript
Se puede acceder a las mutaciones de la misma manera que a las consultas.
import { executeMutation } from 'firebase/data-connect';
import { createMovieRef } from '@dataconnect/generated';
const { data } = await executeMutation(createMovieRef({ movie: 'Empire Strikes Back' }));
Conéctate al emulador Data Connect
De manera opcional, puedes conectarte al emulador llamando a
connectDataConnectEmulator y, luego, pasando la instancia de Data Connect
, de la siguiente manera:
import { connectDataConnectEmulator } from 'firebase/data-connect';
import { connectorConfig } from '@dataconnect/generated';
const dataConnect = getDataConnect(connectorConfig);
connectDataConnectEmulator(dataConnect, 'localhost', 9399);`
// Make calls from your app
Para cambiar a los recursos de producción, comenta las líneas para conectarte al emulador.
Implementa código de cliente para React y Angular
Firebase Data Connect proporciona un SDK generado con hooks para React y Angular con bibliotecas disponibles de nuestros socios en Invertase, TanStack Query Firebase.
Esta biblioteca proporciona un conjunto de hooks que facilitan en gran medida el manejo de tareas asíncronas con Firebase en tus aplicaciones.
Inicializa tu app
Primero, como con cualquier app web de Firebase, inicializa tu app con la secuencia estándar de Firebase.
initializeApp({...});
Instala paquetes de TanStack Query Firebase
instala paquetes para TanStack Query en tu proyecto.
Reaccionar
npm i --save @tanstack/react-query @tanstack-query-firebase/react
npm i --save firebase@latest # Note: React has a peer dependency on ^11.3.0
Angular
ng add @angular/fire
Genera tu SDK de React o Angular
Al igual que con el SDK web estándar, como se describió anteriormente, las herramientas de Firebase controlan la generación automática de SDKs en función de tu esquema y tus operaciones.
Si acabas de agregar React o Angular a tu proyecto, vuelve a ejecutar firebase init dataconnect:sdk para volver a configurar los SDKs generados de modo que incluyan las vinculaciones de framework adicionales.
Importa las bibliotecas
Se necesitan cuatro conjuntos de importaciones para inicializar tu código de cliente de React o Angular: importaciones generales de Data Connect, importaciones generales de TanStack, e importaciones específicas para tus SDKs generados de JS y React.
Observa el tipo ConnectorConfig incluido en las importaciones generales.
Reaccionar
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// TanStack Query-related functions
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
// generated queries and mutations from SDK
import { ListMoviesResponse, connectorConfig } from '@dataconnect/generated';
// generated React hooks from SDK
import { useListAllMovies, useCreateMovie } from "@dataconnect/generated/react";
Angular
// general imports
import { ConnectorConfig, DataConnect, getDataConnect, QueryRef, MutationRef, QueryPromise, MutationPromise } from 'firebase/data-connect';
// TanStack Query-related functions
import { provideTanStackQuery, QueryClient } from "@tanstack/angular-query-experimental";
// generated queries and mutations from SDK
import { ListMoviesResponse, connectorConfig } from '@dataconnect/generated';
// generated React hooks from SDK
import { injectListAllMovies, injectCreateMovie } from "@dataconnect/generated/angular";
Usa consultas y mutaciones en tu cliente de React o Angular
Una vez que se complete la configuración, podrás incorporar métodos del SDK generado.
En el siguiente fragmento, observa el método con el prefijo use useListAllMovies para
React y el método con el prefijo inject injectListAllMovies para Angular, ambos
del SDK generado.
Reaccionar
Todas las operaciones de este tipo en el SDK generado, tanto las consultas como las mutaciones, llaman a las vinculaciones de TanStackQuery:
- Las consultas llaman y muestran elhook
useDataConnectQueryde TanStack - Las mutaciones llaman y muestran el hook
useDataConnectMutationdeTanStack.
import { useListAllMovies } from '@dataconnect/generated/react';
function MyComponent() {
const { isLoading, data, error } = useListAllMovies();
if(isLoading) {
return <div>Loading...</div>
}
if(error) {
return <div> An Error Occurred: {error} </div>
}
}
// App.tsx
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import MyComponent from './my-component';
function App() {
const queryClient = new QueryClient();
return <QueryClientProvider client={queryClient}>
<MyComponent />
</QueryClientProvider>
}
Angular
import { injectAllMovies, connectorConfig } from '@dataconnect/generated/angular';
import { provideDataConnect, getDataConnect } from '@angular/fire/data-connect';
import { provideTanStackQuery, QueryClient } from "@tanstack/angular-query-experimental";
const queryClient = new QueryClient();
...
providers: [
...
provideTanStackQuery(queryClient),
provideDataConnect(() => {
const dc = getDataConnect(connectorConfig);
return dc;
})
]
Usa consultas de recarga automática con React y Angular
Puedes configurar las consultas para que se vuelvan a cargar automáticamente cuando cambien los datos.
Reaccionar
export class MovieListComponent {
movies = useListAllMovies();
}
export class AddPostComponent {
const mutation = useCreateMovie({ invalidate: [listAllMoviesRef()] });
addMovie() {
// The following will automatically cause Tanstack to reload its listAllMovies query
mutation.mutate({ title: 'The Matrix });
}
}
Angular
// class
export class MovieListComponent {
movies = injectListAllMovies();
}
// template
@if (movies.isPending()) {
Loading...
}
@if (movies.error()) {
An error has occurred: {{ movies.error() }}
}
@if (movies.data(); as data) {
@for (movie of data.movies; track movie.id) {
<mat-card appearance="outlined">
<mat-card-content>{{movie.description}}</mat-card-content>
</mat-card>
} @empty {
<h2>No items!</h2>
}
}
Conéctate al emulador Data Connect
De manera opcional, puedes conectarte al emulador llamando a
connectDataConnectEmulator y, luego, pasando la Data Connect
instancia a tu hook generado, de la siguiente manera:
Reaccionar
import { getDataConnect, connectDataConnectEmulator } from 'firebase/data-connect';
import { connectorConfig } from '@dataconnect/generated';
import { useListAllMovies } from '@dataconnect/generated/react';
const dc = getDataConnect(connectorConfig);
connectDataConnectEmulator(dc, 'localhost', 9399);
class AppComponent() {
...
const { isLoading, data, error } = useListAllMovies(dc);
...
}
Angular
// app.config.ts
import { provideDataConnect } from '@angular/fire/data-connect';
import { getDataConnect, connectDataConnectEmulator } from 'firebase/data-connect';
provideDataConnect(() => {
const dc = getDataConnect(connectorConfig);
connectDataConnectEmulator(dc, 'localhost', 9399);
return dc;
}),
Para cambiar a los recursos de producción, comenta las líneas para conectarte al emulador.
Tipos de datos en el SDK
El servidor Data Connect representa tipos de datos comunes de GraphQL. Estos se representan en el SDK de la siguiente manera.
| Data Connect Tipo | TypeScript |
|---|---|
| Marca de tiempo | string |
| Fecha | string |
| UUID | string |
| Int64 | string |
| Doble | Número |
| Número de punto flotante | Número |
Actualiza los SDKs mientras creas prototipos
Si tienes instalada la extensión de Data Connect para VS Code, siempre mantendrá actualizados los SDKs generados.
Si no usas la extensión de Data Connect para VS Code, puedes usar Firebase CLI para mantener actualizados los SDKs generados.
firebase dataconnect:sdk:generate --watchGenera SDKs en canalizaciones de compilación
Puedes usar Firebase CLI para generar Data Connect SDKs en procesos de compilación de CI/CD.
firebase dataconnect:sdk:generate