Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

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.

Antes de configurar um domínio em um aplicativo React Native:

  1. Instale o SDK nativo do Realm React

  2. Instale o pacote @ Realm /react

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:

  1. Importe RealmProvider de @realm/react.

  2. Passe seus modelos de objeto para a propriedade schema .

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

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 de RealmProvider. 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.

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.

Para criptografar um arquivo de domínio no disco, consulte Criptografar um Realm.

Para abrir um domínio que sincroniza dados com Atlas utilizando a Device Sync, consulte Abrir um Realm Sincronizado.

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 utilizando createRealmContext.

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

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;

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

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 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.
const realm = useRealm();
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.
const myTask = useObject(Task, _id);
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.
const tasks = useQuery(Task);

Voltar

Arquivos Realm