Los ejemplos de esta página utilizan el siguiente esquema:
class Dog extends Realm.Object { static schema = { name: 'Dog', properties: { name: 'string', owners: { type: 'list', objectType: 'Person', optional: true, }, age: 'int?', }, }; }
class Dog extends Realm.Object<Dog> { name!: string; owner?: Realm.List<Person>; age?: number; static schema: ObjectSchema = { name: 'Dog', properties: { name: 'string', owners: { type: 'list', objectType: 'Person', optional: true, }, age: 'int?', }, }; }
Eliminar un objeto
Para eliminar un objeto de un reino, pase el objeto a Realm.delete() dentro de una transacción de escritura.
En el siguiente ejemplo de un DogList componente, nosotros:
Consigue acceso a la instancia Realm abierto llamando al hook
useRealm().Recupere todos los perros en la instancia del reino pasando
Dogal ganchouseQuery().Crea un método de componente
deleteDog()que reciba como parámetro un objetoDog. Dentro del método, pasamosRealm.delete()el objetoDog, borrándolo del realm.Agregue un evento onPress en el botón "Borrar perro" que llama al método
deleteDog()del componente.
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteDog = deletableDog => { realm.write(() => { realm.delete(deletableDog); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Button onPress={() => deleteDog(dog)} title='Delete Dog' /> </> ); })} </> ); };
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteDog = (deletableDog: Dog) => { realm.write(() => { realm.delete(deletableDog); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Button onPress={() => deleteDog(dog)} title='Delete Dog' /> </> ); })} </> ); };
Importante
No utilices objetos después de borrar
No se puede acceder ni modificar un objeto después de eliminarlo de un dominio. Si se intenta usar un objeto eliminado, el dominio genera un error.
Eliminar varios objetos
Puedes eliminar varios objetos de un reino de un par de maneras:
Para eliminar todos los objetos de un tipo de objeto determinado de un reino, pase los resultados de useQuery()<ObjectType> al método Realm.delete() dentro de una transacción de escritura.
Para eliminar muchos objetos específicos de un reino, pase Collection.filtered() a
Realm.delete()dentro de una transacción de escritura.
En el siguiente ejemplo de un componente DogList, hacemos lo siguiente:
Recupere la instancia del reino usando el gancho
useRealm().Establezca una variable
myDogspara todos los objetosDogpasando la claseDogal ganchouseQuery().Creamos un método de componente
deleteAllYoungDogObjects()que realiza una transacción de escritura. Dentro de la transacción de escritura, asignamos una variable,youngDogs, al resultado demyDogs.filtered()con una consulta para obtener todos los perros menores de tres años. Luego, pasamosyoungDogsarealm.delete(), eliminando así todos los perros jóvenes del reino.Crea un método de componente
deleteAllDogObjects()que realiza una transacción de escritura. Dentro de la transacción de escritura, pasamosmyDogsarealm.delete(), eliminando todos los perros del dominio.Mapa a través de los perros para renderizar una lista de
Textcomponentes que contienennameyagede un perro.Agregue un evento
onPressen el botón "Eliminar objetos de perros jóvenes" que llame adeleteAllYoungDogObjects(), eliminando todos los perros jóvenes del reino, lo que activa una nueva representación y los elimina de la interfaz de usuario.Agregue un evento
onPressen el botón "Eliminar todos los objetos de perro" que llame adeleteAllDogObjects(), eliminando todos los perros del reino, lo que activa una nueva representación y los elimina de la interfaz de usuario.
Nota
Cuando eliminas objetos de la instancia del reino, el componente los vuelve a renderizar automáticamente y los elimina de la interfaz de usuario.
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteAllYoungDogObjects = () => { const youngDogs = useQuery(Dog, dogs => { return dogs.filtered('age < 3'); }); realm.write(() => { realm.delete(youngDogs); }); }; const deleteAllDogObjects = () => { realm.write(() => { realm.delete(myDogs); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Text>{dog.age}</Text> </> ); })} <Button onPress={() => deleteAllYoungDogObjects()} title='Delete Young Dog Objects' /> <Button onPress={() => deleteAllDogObjects()} title='Delete All Dog Objects' /> </> ); };
const DogList = () => { const realm = useRealm(); const myDogs = useQuery(Dog); const deleteAllYoungDogObjects = () => { const youngDogs = useQuery(Dog, dogs => { return dogs.filtered('age < 3'); }); realm.write(() => { realm.delete(youngDogs); }); }; const deleteAllDogObjects = () => { realm.write(() => { realm.delete(myDogs); }); }; return ( <> {myDogs.map(dog => { return ( <> <Text>{dog.name}</Text> <Text>{dog.age}</Text> </> ); })} <Button onPress={() => deleteAllYoungDogObjects()} title='Delete Young Dog Objects' /> <Button onPress={() => deleteAllDogObjects()} title='Delete All Dog Objects' /> </> ); };
Eliminar todos los objetos en un reino
Para eliminar todos los objetos del dominio, llame a Realm.deleteAll() dentro de una transacción de escritura. Esto borra todas las instancias de objeto del dominio, pero no afecta su esquema.
En el siguiente ejemplo de un componente DeleteProfileSettingsScreen, hacemos lo siguiente:
Obtenga acceso a la instancia del reino abierto llamando al gancho
useRealm()dentro del componente.Crea un método de componente
deleteAllData()que realiza una transacción de escritura y llama aRealm.deleteAll(), eliminando todos los objetos del reino.Agregue un evento
onPressal botón "Eliminar todos los datos" que llame adeleteAllData().
const DeleteProfileSettingsScreen = () => { const realm = useRealm(); const deleteAllData = () => { realm.write(() => { realm.deleteAll(); }); }; return ( <> <Text>Delete all data in your profile:</Text> <Button onPress={deleteAllData} title='Delete all data' /> </> ); };
const DeleteProfileSettingsScreen = () => { const realm = useRealm(); const deleteAllData = () => { realm.write(() => { realm.deleteAll(); }); }; return ( <> <Text>Delete all data in your profile:</Text> <Button onPress={deleteAllData} title='Delete all data' /> </> ); };
Tip
Eliminar todo en desarrollo
Realm.deleteAll() es un método útil para vaciar rápidamente el dominio durante el desarrollo. Por ejemplo, en lugar de escribir una migración para actualizar objetos a un nuevo esquema, puede ser más rápido eliminar y luego regenerar los objetos con la propia aplicación.