RealmProvider(props, context?): null | ReactElement<any, any>
Componentes anidados dentro RealmProvider puede acceder al reino configurado y utilizar los ganchos RealmProvider.
Accesorios
Todas las propiedades de BaseConfiguration se puede pasar como accesorios.
RealmProvider tiene más propiedades que definen su comportamiento:
fallback?: React.ComponentType<unknown> | React.ReactElement | null | undefinedEl componente de respaldo para renderizar mientras se abre el reino.
closeOnUnmount?: booleanEl valor predeterminado es
true. Si se establece enfalse, el dominio no se cerrará al desmontar el componente.realmRef?: React.MutableRefObject<Realm | null>Una referencia a la instancia del dominio. Esto es útil si necesita acceder a la instancia del dominio fuera de su alcance.
children: React.ReactNode
Configurar un reino con RealmProvider
Puedes configurar un RealmProvider de dos maneras:
Importar
RealmProviderdirectamente desde@realm/reactUtilice
createRealmContext()para configurar unRealmProvidery crear ganchos
Esta sección detalla cómo configurar un RealmProvider importado directamente @realm/react desde. Para obtener información sobre el uso createRealmContext() de, consulte Crear contexto con createRealmContext().
Los modelos de objetos forman parte de la mayoría de las configuraciones de dominio. Para obtener más información sobre dominios y modelos de datos, consulte Definir un modelo de objetos de dominio.
RealmProvider es un contenedor que expone un dominio a sus componentes secundarios. El dominio se configura pasando RealmProvider propiedades a.
Al renderizar RealmProvider, se abre el dominio. Esto significa que los componentes secundarios no pueden acceder al dominio si falla el renderizado.
Además RealmProvider de, también debe configurar AppProvider y UserProvider.
Por defecto, Realm sincroniza todos los datos del servidor antes de devolver cualquier dato. If you want to sincronizar data in the segundo plano, read Cómo configurar un Realm sincronizado mientras estás desconectado.
Para configurar un reino sincronizado:
Importar proveedores desde
@realm/react.Configurar
AppProvider.Configure
UserProvidery anídelo dentro deAppProvider.Configure
RealmProviderpara sincronizar y anídelo dentro deUserProvider.Pase sus modelos de objetos a la propiedad
schema.Agregue otras propiedades de Objeto de configuración como props a
RealmProvider.
Debe configurar una suscripción de sincronización. El siguiente ejemplo utiliza una suscripción inicial, pero también puede configurar suscripciones en RealmProvider componentes secundarios.
Debes anidar proveedores como en el siguiente ejemplo:
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 obtener más información sobre cómo configurar un reino sincronizado, consulte Configurar un reino sincronizado.
RealmProvider es un contenedor que expone un dominio a sus componentes secundarios. El dominio se configura pasando RealmProvider propiedades a.
Al renderizar RealmProvider, se abre el dominio. Esto significa que los componentes secundarios no pueden acceder al dominio si falla el renderizado.
Para configurar un reino no sincronizado:
Importar
RealmProviderdesde@realm/react.Pase sus modelos de objetos a la propiedad
schema.Agregue otras propiedades de Objeto de configuración como props a
RealmProvider.
import React from 'react'; import {RealmProvider} from '@realm/react'; function AppWrapperLocal() { return ( <RealmProvider schema={[YourObjectModel]}> <RestOfApp /> </RealmProvider> ); }
Configurar más de un reino
Al importar RealmProvider desde @realm/react, ese proveedor tiene un contexto específico y está asociado a un solo dominio. Si necesita configurar más de un dominio, use createRealmContext() para instanciar un nuevo proveedor para cada dominio.
Si importa useRealm(), useQuery() o useObject() directamente desde @realm/react, esos ganchos usan el contexto de dominio predeterminado. Para trabajar con más de un dominio, debe desestructurar un nuevo proveedor de dominio y sus ganchos asociados a partir del resultado de createRealmContext(). Debe usar proveedores de espacios de nombres para evitar confusiones sobre con qué proveedor y ganchos está trabajando.
Para una guía detallada, consulte Expose More Than One Realm.
Para obtener detalles sobre createRealmContext(), consulte "Crear contexto con createRealmContext()" en esta página.
Ganchos de RealmProvider
useRealm()
useRealm(): Realm
El gancho useRealm() devuelve una instancia de realm abierta. Esta instancia te da acceso a los métodos y propiedades de realm. Por ejemplo, puedes llamar a realm.write() para añadir un objeto realm a tu realm.
Para obtener más información sobre cómo modificar los datos de Realm, consulte Transacciones de escritura.
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' /> </> ); };
Devuelve
RealmDevuelve una instancia de dominio. Este es el dominio creado por el padre del gancho,RealmProvider.
useObject()
useObject<T>(type, primaryKey): T & Realm.Object<T> | null
El useObject() gancho devuelve un objeto Realm para una clave primaria dada. Puedes pasar una clase de objeto o el nombre de la clase como una cadena y la clave primaria.
El método useObject() devuelve nulo si el objeto no existe o se ha eliminado. El gancho se suscribirá automáticamente a las actualizaciones y volverá a renderizar el componente con él ante cualquier cambio en el 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: stringUna cadena que coincide con el nombre de clase de su modelo de objeto o una referencia a una clase que extiende Realm.Object.primaryKey: T[keyof T]La clave principal del objeto deseado.
Devuelve
Realm.Object | nullUn objeto de reino onullsi no se encuentra ningún objeto.
useQuery()
useQuery<T>(type, query?, deps?): Realm.Results<T & Realm.Object<T>>
El gancho useQuery() devuelve una colección de objetos de dominio de un tipo determinado. Estos son los resultados de la consulta. Una consulta puede ser una clase de objeto o el nombre de la clase como una cadena.
El método useQuery() se suscribe a las actualizaciones de cualquier objeto de la colección y vuelve a renderizar el componente usándolo ante cualquier cambio en los resultados.
Puedes usar .filtered() y .sorted() para filtrar y ordenar los resultados de tus query. Debes hacer esto en el argumento query de useQuery para que solo se ejecuten cuando haya cambios en el arreglo de dependencias. Para más ejemplos, consulta la CRUD - Lectura docs.
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: stringUna cadena que coincide con el nombre de clase de su modelo de objeto o una referencia a una clase que extiende Realm.Object.query?: QueryCallback<T>Una función de consulta que permite filtrar y ordenar los resultados. Se basa enuseCallbackpara memorizar la función de consulta.deps?: DependencyListUna lista de dependencias de funciones de consulta que se utiliza para memorizar la función de consulta.
Devuelve
Realm.Results<T>Un objeto de reino onullsi no se encuentra ningún objeto.
Crear contexto con createRealmContext()
createRealmContext(realmConfig?): RealmContext
Generalmente, solo usarás createRealmContext() si necesitas configurar más de un dominio. De lo contrario, debes importar RealmProvider y los ganchos directamente desde @realm/react.
El createRealmContext() método crea un contexto de ReactObjeto para un dominio con una configuración determinada. El Context objeto contiene lo siguiente:
Un componente proveedor de contexto (denominado en otro
RealmProviderlugar) que envuelve a los componentes secundarios y les proporciona acceso a ganchos.Varios ganchos prediseñados que acceden al reino configurado.
Para una guía detallada, consulte Expose More Than One Realm.
Parámetros
realmConfig?: Realm.ConfigurationSe pueden utilizar todas las propiedades de BaseConfiguration.
Devuelve
RealmContextUn objeto que contiene un componenteRealmProvidery los ganchosuseRealm,useQueryyuseObject.