Docs Menu
Docs Home
/ /
CRUD

CRUD - Eliminar - SDK de React Native

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?',
},
};
}

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:

  1. Consigue acceso a la instancia Realm abierto llamando al hook useRealm().

  2. Recupere todos los perros en la instancia del reino pasando Dog al gancho useQuery().

  3. Crea un método de componente deleteDog() que reciba como parámetro un objeto Dog. Dentro del método, pasamos Realm.delete() el objeto Dog, borrándolo del realm.

  4. Mapa través de los perros para representar una lista de Text componentes que contienen un de name perro y un botón "Eliminar perro".

  5. 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.

Puedes eliminar varios objetos de un reino de un par de maneras:

  1. 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.

  2. 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:

  1. Recupere la instancia del reino usando el gancho useRealm().

  2. Establezca una variable myDogs para todos los objetos Dog pasando la clase Dog al gancho useQuery().

  3. 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 de myDogs.filtered() con una consulta para obtener todos los perros menores de tres años. Luego, pasamos youngDogs a realm.delete(), eliminando así todos los perros jóvenes del reino.

  4. Crea un método de componente deleteAllDogObjects() que realiza una transacción de escritura. Dentro de la transacción de escritura, pasamos myDogs a realm.delete(), eliminando todos los perros del dominio.

  5. Mapa a través de los perros para renderizar una lista de Text componentes que contienen name y age de un perro.

  6. Agregue un evento onPress en el botón "Eliminar objetos de perros jóvenes" que llame a deleteAllYoungDogObjects(), eliminando todos los perros jóvenes del reino, lo que activa una nueva representación y los elimina de la interfaz de usuario.

  7. Agregue un evento onPress en el botón "Eliminar todos los objetos de perro" que llame a deleteAllDogObjects(), 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'
/>
</>
);
};

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:

  1. Obtenga acceso a la instancia del reino abierto llamando al gancho useRealm() dentro del componente.

  2. Crea un método de componente deleteAllData() que realiza una transacción de escritura y llama a Realm.deleteAll(), eliminando todos los objetos del reino.

  3. Agregue un evento onPress al botón "Eliminar todos los datos" que llame a deleteAllData().

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.

Volver

Update

En esta página