El SDK de React Native de Realm y @realm/react El paquete proporciona muchas opciones de configuración para su reino.
La configuración de su dominio determina sus capacidades y cómo trabaja con sus datos. Esta página contiene información sobre cómo configurar su dominio de diversas maneras.
Requisitos previos
Antes de configurar un reino en una aplicación React Native:
Instalar el SDK de React Native de Realm
Instala el Paquete @realm/react
Configurar un reino sin sincronización
RealmProvider es un contenedor que expone un dominio a sus componentes secundarios. El dominio se configura pasando RealmProvider propiedades a.
Al renderizar RealmProvider, se abre el dominio. Esto significa que los componentes secundarios no pueden acceder al dominio si falla el renderizado.
Para configurar un reino no sincronizado:
Importar
RealmProviderdesde@realm/react.Pase sus modelos de objetos a la propiedad
schema.Agregue otras propiedades de objeto de configuración como accesorios a
RealmProviderpara configurar su reino.
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider schema={[YourObjectModel]}> <RestOfApp /> </RealmProvider> ); }
Para obtener una lista de proveedores y ganchos utilizados en un reino no sincronizado, consulte Proveedores y ganchos de @realm/react.
Opciones de configuración
Puedes configurar RealmProvider estableciendo props que coincidan con las propiedades de un objeto de configuración. También puedes establecer los props fallback y realmRef.
realmRef- Se usa con
useRefpara exponer el dominio configurado a procesos externos aRealmProvider. Esto puede ser útil para, por ejemplo, un respaldo tras el restablecimiento de un cliente.
fallback- Se renderiza mientras se espera la apertura del dominio. Los dominios locales suelen abrirse con la suficiente rapidez como para que la propiedad
fallbackno sea necesaria.
Configurar un dominio en memoria
Para crear un reino que se ejecute completamente en la memoria sin escribirse en un archivo, pase true a la propiedad inMemory en su RealmProvider:
import React from 'react'; import {Realm, RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider inMemory={true}> <RestOfApp /> </RealmProvider> ); }
Los reinos en memoria pueden usar espacio en disco si la memoria se está agotando, pero los archivos creados por un reino en memoria se eliminan cuando usted cierra el reino.
Cifrar un reino
Para cifrar un archivo de reino en el disco, consulte Cifrar un reino.
Configurar un reino sincronizado
Para abrir un reino que sincronice datos con Atlas mediante Sincronización de dispositivos, consulte Abrir un reino sincronizado.
Exponer más de un reino
El @realm/react paquete expone dominios en tu aplicación mediante objetos de contexto de React y componentes de proveedor. Puedes acceder a los dominios con ganchos de React.
Para exponer más de un reino, considere lo siguiente:
Cada reino necesita su propio objeto Context, creado con createRealmContext().
Los proveedores y ganchos dentro de cada contexto deben tener espacios de nombres para que sea fácil razonar sobre el ámbito con el que estás trabajando.
Si importa
RealmProviderdirectamente desde@realm/react, se trata de un objeto Context independiente. Los proveedores y ganchos de ese objeto no pueden desincronizarse con los objetos Context creados concreateRealmContext.
Crear objetos de contexto separados
Puede abrir más de un reino a la vez creando objetos de contexto adicionales usando createRealmContext().
import React from 'react'; import { Realm, AppProvider, UserProvider, createRealmContext, } from '@realm/react'; class SharedDocument extends Realm.Object { static schema = { name: 'SharedDocument', properties: { _id: 'objectId', owner_id: 'objectId', title: 'string', createdDate: 'date', }, primaryKey: '_id', }; } class LocalDocument extends Realm.Object { static schema = { name: 'LocalDocument', properties: { _id: 'objectId', name: 'string', createdDate: 'date', }, }; } // Create Shared Document context object. const SharedRealmContext = createRealmContext({ schema: [SharedDocument], }); // Create Local Document context object. const LocalRealmContext = createRealmContext({ schema: [LocalDocument], });
import React from 'react'; import { Realm, AppProvider, UserProvider, createRealmContext, } from '@realm/react'; class SharedDocument extends Realm.Object<SharedDocument> { _id!: Realm.BSON.ObjectId; owner_id!: Realm.BSON.ObjectId; title!: string; createdDate?: Date; static schema: ObjectSchema = { name: 'SharedDocument', properties: { _id: 'objectId', owner_id: 'objectId', title: 'string', createdDate: 'date', }, primaryKey: '_id', }; } class LocalDocument extends Realm.Object<LocalDocument> { _id!: Realm.BSON.ObjectId; name!: string; createdDate?: Date; static schema: ObjectSchema = { name: 'LocalDocument', properties: { _id: 'objectId', name: 'string', createdDate: 'date', }, }; } // Create Shared Document context object. const SharedRealmContext = createRealmContext({ schema: [SharedDocument], }); // Create Local Document context object. const LocalRealmContext = createRealmContext({ schema: [LocalDocument], });
Proveedores de extracción y ganchos
Necesita extraer proveedores y ganchos de cada objeto Context. Debe asignarles un espacio de nombres mediante desestructuración. Esto facilita la comprensión del dominio con el que trabaja.
Consulta los ganchos de RealmProvider no sincronizados para ver qué ganchos están disponibles para un RealmProvider que no utiliza la sincronización de dispositivos.
// Namespace the Shared Document context's providers and hooks. const { RealmProvider: SharedDocumentRealmProvider, useRealm: useSharedDocumentRealm, } = SharedRealmContext; // Namespace the Local Document context's providers and hooks. const { RealmProvider: LocalDocumentRealmProvider, useRealm: useLocalDocumentRealm, } = LocalRealmContext;
Utilice proveedores y ganchos con espacios de nombres
Tras extraer los proveedores y ganchos de un objeto Context, puedes usarlos en los componentes de tu aplicación. Los componentes secundarios dentro de los proveedores extraídos tienen acceso a los ganchos extraídos.
function TwoRealmsWrapper() { return ( <View> <AppProvider id={APP_ID}> <UserProvider fallback={LogIn}> {/* This is a Flexible Sync realm. */} <SharedDocumentRealmProvider sync={{flexible: true}}> <AppSectionOne /> </SharedDocumentRealmProvider> </UserProvider> </AppProvider> {/* This is a separate local-only realm. */} <LocalDocumentRealmProvider> <AppSectionTwo /> </LocalDocumentRealmProvider> </View> ); } function AppSectionOne() { const realm = useSharedDocumentRealm(); // Work with shared documents... } function AppSectionTwo() { const realm = useLocalDocumentRealm(); // Work with local documents... }
Acceder a un dominio sin proporcionar un esquema
Tras crear un dominio en un dispositivo, no es necesario pasar siempre un esquema para acceder a él. En su lugar, se puede usar RealmProvider sin pasar ningún modelo de objeto a su propiedad schema. El esquema del dominio se deriva del archivo de dominio existente en Realm.defaultPath.
Acceder a un dominio sin proporcionar un esquema solo funciona con dominios locales. Siempre debe proporcionar un esquema al usar un dominio sincronizado.
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapper() { return ( // To access a realm at the default path, do not pass any configuration. // Requires a realm that has already been created. <RealmProvider> <RestOfApp /> </RealmProvider> ); }
Proveedores y ganchos de @realm/react
@realm/react tiene proveedores y ganchos que simplifican el trabajo con su reino no sincronizado y sus datos.
Proveedor/Gancho | Descripción | Ejemplo | |
|---|---|---|---|
Un contenedor que expone un reino a sus componentes secundarios, que tienen acceso a ganchos que le permiten leer, escribir y actualizar datos. | |||
Devuelve la instancia de Realm abierta por RealmProvider. | | ||
Devuelve un objeto ( | | ||
Devuelve una colección de objetos ( | |