RealmProvider (@realm/react)
Nesta página
RealmProvider(props, context?): null | ReactElement<any, any>
Os componentes aninhados em RealmProvider
podem acessar o Realm configurado e usar os hooks RealmProvider
.
Props
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 comofalse
, 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
Configurar um Realm com o RealmProvider
É possível configurar um RealmProvider
de duas maneiras:
Importar
RealmProvider
diretamente de@realm/react
Usar
createRealmContext()
para configurar umRealmProvider
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:
Importar provedores do
@realm/react
.Configure o
AppProvider
.Configure o
UserProvider
e aninhe-o noAppProvider
.Configure
RealmProvider
para sincronização e aninhe-o emUserProvider
.Passe seus modelos de objeto para a propriedade
schema
.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:
Importe
RealmProvider
de@realm/react
.Passe seus modelos de objeto para a propriedade
schema
.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> ); }
Configurar mais de um Realm
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.
Hooks do RealmProvider
useRealm()
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
.
useObject()
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 ounull
se nenhum objeto for encontrado.
useQuery()
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 nouseCallback
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 ounull
se nenhum objeto for encontrado.
Criar contexto com createRealmContext()
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 componenteRealmProvider
e os hooksuseRealm
,useQuery
euseObject
.