Docs Menu
Docs Home
/ /
Archivos del reino

Configurar un dominio - SDK de React Native

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.

Antes de configurar un reino en una aplicación React Native:

  1. Instalar el SDK de React Native de Realm

  2. Instala el Paquete @realm/react

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:

  1. Importar RealmProvider desde @realm/react.

  2. Pase sus modelos de objetos a la propiedad schema.

  3. Agregue otras propiedades de objeto de configuración como accesorios a RealmProvider para 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.

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 useRef para exponer el dominio configurado a procesos externos a RealmProvider. 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 fallback no sea necesaria.

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.

Para cifrar un archivo de reino en el disco, consulte Cifrar un reino.

Para abrir un reino que sincronice datos con Atlas mediante Sincronización de dispositivos, consulte Abrir un reino sincronizado.

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 RealmProvider directamente 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 con createRealmContext.

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],
});

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;

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...
}

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>
);
}

@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.

const realm = useRealm();

Devuelve un objeto (Realm.Object<T>) de un tipo y valor de clave principal dados. Se actualiza al recibir cualquier cambio en el objeto devuelto. Devuelve null si el objeto no existe o se ha eliminado.

const myTask = useObject(Task, _id);

Devuelve una colección de objetos (Realm.Results<T & Realm.Object T>) de un tipo determinado. Se actualiza al recibir cualquier cambio en cualquier objeto de la colección. Si la colección está vacía, devuelve una matriz vacía.

const tasks = useQuery(Task);

Volver

Archivos del reino

En esta página