Realm permite agrupar archivos de realm. Al agrupar un archivo de realm, se incluye una base de datos y todos sus datos en la descarga de la aplicación.
Esto permite a los usuarios iniciar aplicaciones por primera vez con un conjunto de datos iniciales. En el caso de los dominios sincronizados, la agrupación puede evitar una descarga inicial prolongada la primera vez que un usuario abre la aplicación. En su lugar, los usuarios solo deben descargar los cambios sincronizados realizados desde que se generó el archivo agrupado.
Importante
Sólo se aplica a los reinos locales
El contenido de esta página sólo se aplica a los reinos locales.
Advertencia
No se aplica a aplicaciones Expo
Este procedimiento no funciona para aplicaciones React Native creadas con Expo.
Procedimiento
Siga estos pasos para crear y agrupar un archivo de reino para su aplicación React Native.
Crear un archivo de reino para agrupar
La forma más sencilla de crear un reino empaquetado para su aplicación React Native es escribir un script Node.js separado para crear el paquete.
Deberías utilizar el realm paquete para crear su paquete en lugar de @realm/react.
Cree una aplicación de reino temporal que comparta el modelo de datos de su aplicación.
Abra un dominio y agregue los datos que desea agrupar. Si usa un dominio sincronizado, espere a que se sincronice por completo.
crear-reino-agrupado.jsimport Realm from "realm"; import { Dog } from "./schemas"; // open realm const config = { schema: [Dog], path: "bundle.realm", }; const realm = await Realm.open(config); // add data to realm realm.write(() => { realm.create("Dog", { name: "Jasper", age: 10, type: "Golden Retriever" }); realm.create("Dog", { name: "Maggie", age: 12, type: "Collie" }); realm.create("Dog", { name: "Sophie", age: 6, type: "German Shepard" }); }); realm.close(); Anote la ruta del archivo del dominio incluido. Necesitará este archivo para usar el dominio incluido en su aplicación de producción, como se describe en la siguiente sección.
temp_realm_app. ├── bundle.realm ... rest of files in _temp_ application
Agrupe el archivo Realm con su aplicación
Ahora que tiene una copia del dominio que contiene los datos iniciales, agregue el archivo del dominio empaquetado a su aplicación de producción. La ubicación del dominio empaquetado varía según las compilaciones de iOS y Android.
Abra la carpeta
androidgenerada por React Native en Android Studio.En el Project En el árbol, navegue hasta
app > src > main. Haga clic derecho en el directoriomain. Cree un nuevo subdirectorio llamadoassets.Arrastre el archivo realm empaquetado al directorio
assets.
En Xcode, abra el archivo
your_project_name.xcworkspacedentro del directorioiosgenerado por React Native.Seleccione su aplicación en el navegador del proyecto y seleccione la pestaña Build Phases en la descripción general del proyecto.
Expandir el elemento Copy Bundle Resources.
Haz clic en el icono +.
Haga clic en el botón Add Other....
Busca el archivo de dominio incluido y añádelo. No cambies la configuración predeterminada y selecciona el botón Finish.
Abra el Bundled Realm en su aplicación
El dominio ya está empaquetado y se incluirá cuando un usuario descargue la aplicación. Para agregar el archivo del dominio empaquetado al directorio de documentos de la aplicación, llame a Realm.copyBundledRealmFiles() antes de abrir el reino.
Realm.copyBundledRealmFiles() Agrega todos los archivos *.realm del paquete de la aplicación al directorio de documentos de la aplicación. Este método no sobrescribe ningún archivo existente con el mismo nombre, por lo que es seguro llamarlo cada vez que se inicia la aplicación.
Abra el reino incluido con el mismo nombre y configuración que especificó cuando creó inicialmente el reino incluido.
Ahora que tiene una copia del reino incluida con su aplicación de producción, necesita agregar código para usarlo.
import React from 'react'; import {createRealmContext, Realm} from '@realm/react'; import {Dog} from './schema'; Realm.copyBundledRealmFiles(); const realmContext = createRealmContext({schema: [Dog], path: 'bundle.realm'}); const {RealmProvider} = realmContext; export default function OpenBundledRealm() { return ( <RealmProvider> {/* Rest of app has access to objects pre-populated in the bundled realm. */} <RestOfApp /> </RealmProvider> ); }