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 | undefinedO componente alternativo a ser renderizado durante a abertura do Realm.
closeOnUnmount?: booleanO 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
RealmProviderdiretamente de@realm/reactUsar
createRealmContext()para configurar umRealmProvidere 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
UserProvidere aninhe-o noAppProvider.Configure
RealmProviderpara 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
RealmProviderde@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
RealmRetorna 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: stringUma 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 | nullUm objeto de Realm ounullse 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: stringUma 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 nouseCallbackpara memorizar a função de consulta.deps?: DependencyListUma 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 ounullse 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 objeto React Context para um Realm com uma determinada configuração.O Context objeto contém o seguinte:
Um componente Context Provider (tratado como
RealmProviderem outros lugares) 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.ConfigurationTodas as propriedades de BaseConfiguration podem ser utilizadas.
Devoluções
RealmContextUm objeto contendo um componenteRealmProvidere os hooksuseRealm,useQueryeuseObject.