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

RealmProvider (@realm/react)

Nesta página

  • Props
  • Configurar um Realm com o RealmProvider
  • Configurar mais de um Realm
  • Hooks do RealmProvider
  • useRealm()
  • useObject()
  • useQuery()
  • Criar contexto com createRealmContext()
Type signature
RealmProvider(props, context?): null | ReactElement<any, any>

Os componentes aninhados em RealmProvider podem acessar o Realm configurado e usar os hooks RealmProvider.

Todas as propriedades de BaseConfiguration podem ser passadas como props.

RealmProvider possui mais acessórios que definem seu comportamento:

  • fallback?: React.ComponentType<unknown> | React.ReactElement | null | undefined

    O componente alternativo a ser renderizado durante a abertura do Realm.

  • closeOnUnmount?: boolean

    O padrão é true. Se definido como false, o Realm permanecerá aberto mesmo após o desmonte do componente.

  • realmRef?: React.MutableRefObject<Realm | null>

    Uma referência à instância de Realm. Isso é útil para acessar a instância de Realm fora do seu escopo de Realm.

  • children: React.ReactNode

É possível configurar um RealmProvider de duas maneiras:

  • Importar RealmProvider diretamente de @realm/react

  • Usar createRealmContext() para configurar um RealmProvider e criar hooks

Esta seção detalha como configurar um RealmProvider importado diretamente do @realm/react. Para obter informações sobre como usar createRealmContext(), consulte Crie contexto com createRealmContext().

Os modelos de objetos fazem parte da maioria das configurações do Realm. Para saber mais sobre o Realm e os modelos de dados, consulte Definir um Realm Object Model.

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.

Além do RealmProvider, você também precisa configurar o AppProvider e UserProvider.

Por padrão, o Realm sincroniza todos os dados do servidor antes de retornar qualquer coisa. Se você quiser sincronizar dados em segundo plano, leia Configure um Realm sincronizado enquanto estiver offline.

Para configurar um Realm sincronizado:

  1. Importar provedores do @realm/react.

  2. Configure o AppProvider.

  3. Configure o UserProvider e aninhe-o no AppProvider.

  4. Configure RealmProvider para sincronização e aninhe-o em UserProvider.

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

  6. Adicione outras propriedades de objeto de configuração como props ao RealmProvider.

Você deve configurar uma assinatura de sincronização. O exemplo abaixo utiliza uma assinatura inicial, mas você também pode configurar assinaturas em componentes filhos do RealmProvider.

Você deve aninhar provedores seguindo o exemplo abaixo:

import React from 'react';
import {AppProvider, UserProvider, RealmProvider} from '@realm/react';
function AppWrapperSync() {
return (
<AppProvider id={APP_ID}>
<UserProvider fallback={LogIn}>
<RealmProvider
schema={[YourObjectModel]}
sync={{
flexible: true,
initialSubscriptions: {
update(subs, realm) {
subs.add(realm.objects(YourObjectModel));
},
},
}}>
<RestOfApp />
</RealmProvider>
</UserProvider>
</AppProvider>
);
}

Para obter mais informações sobre como configurar um Realm sincronizado, consulte Configurar um Realm sincronizado.

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 props ao RealmProvider.

import React from 'react';
import {RealmProvider} from '@realm/react';
function AppWrapperLocal() {
return (
<RealmProvider schema={[YourObjectModel]}>
<RestOfApp />
</RealmProvider>
);
}

Quando você importa RealmProvider de @realm/react, esse fornecedor tem um contexto específico e está associado a um único Realm. Se você precisar configurar mais de um Realm, utilize o createRealmContext() para instanciar um novo provedor para cada domínio.

Se você importar useRealm(), useQuery() ou useObject() diretamente de @realm/react, esses hooks utilizarão o contexto padrão de Realm. Para trabalhar com mais de um realm, é preciso desestruturar um novo provedor de realm e seus hooks associados a partir do resultado do createRealmContext(). Adote provedores de namespace para evitar confusão em relação ao provedor e aos hooks em uso.

Para obter um guia detalhado, consulte Expor mais de um Realm.

Para obter detalhes sobre createRealmContext(), consulte "Criar contexto com createRealmContext()" nesta página.

Type signature
useRealm(): Realm

O hook useRealm() retorna uma instância de Realm aberta. A instância de Realm dá acesso aos métodos e propriedades do Realm. Por exemplo, é possível chamar realm.write() para adicionar um objeto de Realm ao seu Realm.

Para saber mais sobre como modificar dados do Realm, consulte Transações de gravação.

const CreatePersonInput = () => {
const [name, setName] = useState('');
const realm = useRealm();
const handleAddPerson = () => {
realm.write(() => {
realm.create('Person', {_id: PERSON_ID, name: name, age: 25});
});
};
return (
<>
<TextInput value={name} onChangeText={setName} />
<Button
onPress={() => handleAddPerson()}
title='Add Person'
/>
</>
);
};

Devoluções

  • Realm Retorna uma instância de Realm. Este é o Realm criado pelo pai do hook, RealmProvider.

Type signature
useObject<T>(type, primaryKey): T & Realm.Object<T> | null

O hook useObject() retorna um objeto de Realm para uma determinada chave primária. Você pode passar uma classe de objeto ou o nome da classe como uma string e a chave primária.

O método useObject() retorna nulo caso o objeto não exista ou você o tenha excluído. O hook se inscreverá automaticamente nas atualizações e renderizará novamente o componente usando o hook em qualquer alteração no objeto.

const TaskItem = ({_id}: {_id: number}) => {
const myTask = useObject(Task, _id);
return (
<View>
{myTask ? (
<Text>
{myTask.name} is a task with the priority of: {myTask.priority}
</Text>
) : null}
</View>
);
};

Parâmetros

  • type: string Uma string que corresponda ao nome da classe do seu modelo de objetos ou uma referência a uma classe que estenda Realm.Object.

  • primaryKey: T[keyof T] A chave primária do objeto desejado.

Devoluções

  • Realm.Object | null Um objeto de Realm ou null se nenhum objeto for encontrado.

Type signature
useQuery<T>(type, query?, deps?): Realm.Results<T & Realm.Object<T>>

O hook useQuery() retorna uma coleção de objetos de Realm de um determinado tipo. Estes são os resultados da sua consulta. Uma consulta pode ser uma classe de objeto ou o nome da classe como uma string.

O método useQuery() se inscreve nas atualizações de qualquer objeto da coleção e renderiza novamente o componente que o utiliza em qualquer alteração nos resultados.

Você pode utilizar .filtered() e .sorted() para filtrar e classificar seus resultados de consulta. Você deve fazer isso no argumento query de useQuery para que eles sejam executados somente quando houver alterações na array de dependências. Para obter mais exemplos, consulte a documentação CRUD - Read.

const TaskList = () => {
const [priority, setPriority] = useState(4);
// filter for tasks with a high priority
const highPriorityTasks = useQuery(
Task,
tasks => {
return tasks.filtered('priority >= $0', priority);
},
[priority],
);
// filter for tasks that have just-started or short-running progress
const lowProgressTasks = useQuery(Task, tasks => {
return tasks.filtered(
'$0 <= progressMinutes && progressMinutes < $1',
1,
10,
);
});
return (
<>
<Text>Your high priority tasks:</Text>
{highPriorityTasks.map(taskItem => {
return <Text>{taskItem.name}</Text>;
})}
<Text>Your tasks without much progress:</Text>
{lowProgressTasks.map(taskItem => {
return <Text>{taskItem.name}</Text>;
})}
</>
);
};

Parâmetros

  • type: string Uma string que corresponda ao nome da classe do seu modelo de objetos ou uma referência a uma classe que estenda Realm.Object.

  • query?: QueryCallback<T> Uma função de consulta que pode filtrar e classificar os resultados da consulta. Constrói no useCallback para memorizar a função de consulta.

  • deps?: DependencyList Uma lista de dependências de função de consulta que é usada para memorizar a função de consulta.

Devoluções

  • Realm.Results<T> Um objeto de Realm ou null se nenhum objeto for encontrado.

Type signature
createRealmContext(realmConfig?): RealmContext

Na maioria das vezes, você só precisará usar o createRealmContext() se você precisar configurar mais de um Realm. Caso contrário, você deve importar RealmProvider e hooks diretamente de @realm/react.

O createRealmContext() método cria um contexto de reação objeto para um Realm com uma determinada configuração. O Context objeto contém o seguinte:

  • Um provedor de contexto (referido como em outros RealmProvider lugares) componente que envolve componentes filho e fornece a eles acesso aos hooks.

  • Vários hooks pré-construídos que acessam o Realm configurado.

Para obter um guia detalhado, consulte Expor mais de um Realm.

Parâmetros

  • realmConfig?: Realm.Configuration Todas as propriedades de BaseConfiguration podem ser utilizadas.

Devoluções

  • RealmContext Um objeto contendo um componente RealmProvider e os hooks useRealm, useQuery e useObject.

Voltar

Referência da API