Los ejemplos de esta página utilizan el siguiente esquema:
class Task extends Realm.Object { static schema = { name: 'Task', properties: { _id: 'int', name: 'string', priority: 'int?', progressMinutes: 'int?', assignee: 'Person?', }, primaryKey: '_id', }; }
class Task extends Realm.Object<Task> { _id!: number; name!: string; priority?: number; progressMinutes?: number; assignee?: Person; age?: number; static schema: ObjectSchema = { name: 'Task', properties: { _id: 'int', name: 'string', priority: 'int?', progressMinutes: 'int', assignee: 'Person?', }, primaryKey: '_id', }; }
Actualizar un objeto
Puedes agregar, modificar o eliminar propiedades de un objeto Realm de la misma manera que actualizarías cualquier otro objeto JavaScript. Sin embargo, debes hacerlo dentro de una transacción de escritura.
En el siguiente ejemplo de un TaskItem componente, nosotros:
Obtenga acceso a la instancia del reino abierto llamando al gancho
useRealm()dentro del componente.Recupere una tarea llamando a
useObject()con "Tarea" y el parámetro_iddel componente.Crea un método de componente
incrementTaskProgress()que realiza una transacción de escritura e incrementa elprogressMinutesde la tarea.Renderizar el
namey elprogressMinutesde la tarea en la Interfaz de Usuario.Agregar un onPressevento en el botón "incrementar" que llama
incrementTaskProgress()a.
const TaskItem = ({_id}) => { const realm = useRealm(); const myTask = useObject(Task, _id); const incrementTaskProgress = () => { if (myTask) { realm.write(() => { myTask.progressMinutes += 1; }); } }; if (myTask) { return ( <> <Text>Task: {myTask.name}</Text> <Text>Progress made (in minutes):</Text> <Text>{myTask.progressMinutes}</Text> <Button onPress={() => incrementTaskProgress()} title='Increment Task Progress' /> </> ); } else { return <></>; } };
const TaskItem = ({_id}: {_id: number}) => { const realm = useRealm(); const myTask = useObject(Task, _id); const incrementTaskProgress = () => { if (myTask) { realm.write(() => { myTask.progressMinutes! += 1; }); } }; if (myTask) { return ( <> <Text>Task: {myTask.name}</Text> <Text>Progress made (in minutes):</Text> <Text>{myTask.progressMinutes}</Text> <Button onPress={() => incrementTaskProgress()} title='Increment Task Progress' /> </> ); } else { return <></>; } };
Tip
Actualizar objetos relacionados y incrustados
Para actualizar una propiedad de un objeto incrustado o un objeto relacionado, modifique la propiedad con notación de punto o de corchetes como si estuviera en un objeto anidado normal.
Insertar un objeto
Para insertar un objeto en una transacción de escritura, llame a Realm.create() con el modo de actualización establecido modified en. La operación inserta un nuevo objeto con la clave principal dada o actualiza un objeto existente que ya la tiene.
Nota
La inserción requiere Realm.create()
Debes llamar a Realm.create() dentro de una transacción de escritura para insertar un objeto. Esto es diferente a crear un nuevo objeto de dominio llamando al operador "new".
En el siguiente ejemplo de un componente CreateTaskItem:
Obtenga acceso a la instancia del reino abierto llamando al gancho
useRealm()dentro del componente.Realice una transacción de escritura y cree un
Taskobjeto con un_idvalor1234de.Llame a
Realm.create()dentro de la transacción de escritura para insertar un objetoTaskespecificando el mismo_idy un ``progressMinutes`` diferente y el modo de actualización establecido en "modificado".Representa las tareas
nameyprogressMinutesen la interfaz de usuario, mostrando el progreso modificado.
const CreateTaskItem = () => { const realm = useRealm(); let myTask; realm.write(() => { // Add a new Task to the realm. Since no task with ID 1234 // has been added yet, this adds the instance to the realm. myTask = realm.create( 'Task', {_id: 1234, name: 'Wash the car', progressMinutes: 0}, 'modified', ); // If an object exists, setting the third parameter (`updateMode`) to // "modified" only updates properties that have changed, resulting in // faster operations. myTask = realm.create( 'Task', {_id: 1234, name: 'Wash the car', progressMinutes: 5}, 'modified', ); }); return ( <> <Text>{myTask.name}</Text> <Text>Progress made (in minutes):</Text> <Text>{myTask.progressMinutes}</Text> </> ); };
const CreateTaskItem = () => { const realm = useRealm(); const myTask: Realm.Object = realm.write(() => { // Add a new Task to the realm. Since no Task with ID 1234 // has been added yet, this adds the instance to the realm. realm.create( 'Task', {_id: 1234, name: 'Wash the car', progressMinutes: 0}, 'modified', ); // If an object exists, setting the third parameter (`updateMode`) to // "modified" only updates properties that have changed, resulting in // faster operations. return realm.create( 'Task', {_id: 1234, name: 'Wash the car', progressMinutes: 5}, 'modified', ); }); return ( <> <Text>{myTask.name}</Text> <Text>Progress made (in minutes):</Text> <Text>{myTask.progressMinutes}</Text> </> ); };
Actualizar colección por lotes
Para aplicar una actualización a una colección de objetos, itera sobre ella (por ejemplo, con for...of). En el bucle, actualiza cada objeto individualmente.
En el siguiente ejemplo de un componente TaskDashboard, hacemos lo siguiente:
Obtenga acceso a la instancia del reino abierto llamando al gancho
useRealm()dentro del componente.Recupera todas las tareas en la instancia Realm pasando
Taskal ganchouseQuery().Crea un método de componente
resetProgressOnAllTasks()que realiza una transacción de escritura. Dentro de esa transacción, actualizamos en bloque todas las tareas recorriéndolas confor...ofy estableciendo su valor deprogressMinutesen 0.Recorra las tareas para generar una lista de
Textcomponentes que muestren losnamey de cadaprogressMinutestarea.
const TaskDashboard = () => { const realm = useRealm(); const tasks = useQuery(Task); const resetProgressOnAllTasks = () => { realm.write(() => { for (const task of tasks) { task.progressMinutes = 0; } }); }; return ( <> {tasks.map(task => { <Text> {task.name} has {task.progressMinutes} minutes progressed </Text>; })} <Button onPress={resetProgressOnAllTasks} title='Reset Progress' /> </> ); };