Configurar um Realm - React Native SDK
Nesta página
- Pré-requisitos
- Configurar um domínio sem sincronização
- Opções de configuração
- Configurar um domínio na memória
- Criptografar um Realm
- Configurar um realm sincronizado
- Exponha mais de um domínio
- Criar objetos de contexto separados
- Extrair fornecedores e ganchos
- Use provedores e ganchos com namespace
- Acesse um domínio sem fornecer um esquema
- @realm/react Providers and Hooks
O pacote Realm React Native SDK e @realm/react
fornecem muitas opções de configuração para o seu domínio.
Como você configura seu domínio determina os recursos do seu domínio e como você trabalha com seus dados. Esta página contém informações sobre como configurar seu domínio de várias maneiras.
Pré-requisitos
Antes de configurar um domínio em um aplicativo React Native:
Instale o SDK nativo do Realm React
Instale o pacote @ Realm /react
Configurar um domínio sem sincronização
RealmProvider é um invólucro que expõe um domínio aos seus componentes secundários. Você configura seu domínio passando adereços para RealmProvider
.
Quando RealmProvider
é renderizado, ele abre o domínio. Isso significa que os componentes filhos não poderão acessar o realm se a renderização falhar.
Para configurar um domínio não sincronizado:
Importe
RealmProvider
de@realm/react
.Passe seus modelos de objeto para a propriedade
schema
.Adicione outras propriedades de objeto de configuração como acessórios no
RealmProvider
para configurar seu domínio.
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider schema={[YourObjectModel]}> <RestOfApp /> </RealmProvider> ); }
Para obter uma lista de provedores e ganchos usados em áreas não sincronizadas, consulte @realm/react Provedores e Ganchos.
Opções de configuração
Você pode configurar RealmProvider
definindo props que correspondam às propriedades de um objeto Configuration. Você também pode definir fallback
e realmRef
acessórios.
realmRef
- Usado com
useRef
para expor o território configurado a processos fora deRealmProvider
. Isso pode ser útil para coisas como um fallback de redefinição do cliente.
fallback
- Renderizado enquanto espera a abertura do domínio. Os domínios locais geralmente se abrem rápido o suficiente para que o suporte
fallback
não seja necessário.
Configurar um domínio na memória
Para criar um território que é executado inteiramente na memória sem ser gravado em um arquivo, passe true
para o suporte inMemory
em seu RealmProvider
:
import React from 'react'; import {Realm, RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider inMemory={true}> <RestOfApp /> </RealmProvider> ); }
Os realms na memória podem usar espaço em disco se a memória estiver fraca, mas os arquivos criados por um realm na memória são excluídos quando você fecha o realm.
Criptografar um Realm
Para criptografar um arquivo de domínio no disco, consulte Criptografar um Realm.
Configurar um realm sincronizado
Para abrir um domínio que sincroniza dados com Atlas utilizando a Device Sync, consulte Abrir um Realm Sincronizado.
Exponha mais de um domínio
O @realm/react
pacote expõe regiões em seu aplicação usando objetos React Context e componentes do provedor. Você pode acessar domínios com ganchos React.
Para expor mais de um domínio, considere o seguinte:
Cada região precisa de seu próprio objeto Context, criado com createRealmContext().
Os provedores e ganchos dentro de cada contexto devem ser nomeados para que seja fácil raciocinar sobre o domínio com o qual você está trabalhando.
Se importar
RealmProvider
diretamente de@realm/react
, é um objeto Contexto separado. Os provedores e ganchos deste objeto não podem ser desinstalados com objetos de contexto criados utilizandocreateRealmContext
.
Criar objetos de contexto separados
Você pode abrir mais de um realm ao mesmo tempo criando objetos Context adicionais 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], });
Extrair fornecedores e ganchos
Você precisa extrair provedores e ganchos de cada objeto de contexto. Você deve dar um namespace aos provedores e ganchos usando a desestruturação. Isso torna mais fácil raciocinar sobre o domínio com o qual você está trabalhando.
Consulte Ganchos RealmProvider não sincronizados para ver quais ganchos estão disponíveis para um RealmProvider
que não esteja usando o Device Sync.
// 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;
Use provedores e ganchos com namespace
Depois de extrair os provedores e ganchos de um objeto Context, você pode usá-los nos componentes do seu aplicativo. Componentes filho dentro de provedores extraídos têm acesso a 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... }
Acesse um domínio sem fornecer um esquema
Depois que um realm é criado em um dispositivo, você não precisa sempre passar um esquema para acessar o domínio. Em vez disso, você pode utilizar o RealmProvider
sem passar quaisquer modelos de objeto para sua propriedade schema
. O esquema do domínio é derivado do arquivo de domínio existente em Realm.defaultPath
.
Acessar um domínio sem fornecer um esquema só funciona para domínios locais. Você deve sempre passar um esquema ao usar um domínio 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 Providers and Hooks
@realm/react
tem provedores e ganchos que simplificam o trabalho com seu domínio não sincronizado e seus dados.
Fornecedor/Gancho | Descrição | Exemplo | |
---|---|---|---|
Um wrapper que expõe um domínio a seus componentes filhos, que tem acesso a ganchos que permitem ler, escrever e atualizar dados. | |||
Retorna a instância do Realm aberto pelo RealmProvider. |
| ||
Retorna um objeto ( Realm.Object<T> ) de um determinado tipo e valor da chave primária. Atualizações sobre quaisquer alterações no objeto retornado. Retorna null se o objeto não existir ou tiver sido excluído. |
| ||
Retorna uma coleção de objetos ( Realm.Results<T & Realm.Object T> ) de um determinado tipo. Atualizações sobre quaisquer alterações em qualquer objeto da coleção. Retorna uma array vazia se a coleção estiver vazia. |
|