CRUD - Excluir - React Native SDK
Os exemplos nesta página usam o seguinte 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?', }, }; }
Excluir um objeto
Para excluir um objeto de um Realm, passe o objeto para Realm.delete() dentro de uma transação de gravação.
No seguinte exemplo de um componente DogList
, nós:
Obter acesso a uma instância de realm aberta chamando a função hook
useRealm()
.Recupere todos os cães na instância do domínio passando
Dog
para o hookuseQuery()
.Crie um método de componente
deleteDog()
que receba um objetoDog
como parâmetro. Dentro do método, passamosRealm.delete()
o objetoDog
, excluindo-o do domínio.Mapa através dos cães para renderizar uma lista de
Text
componentes do que contêm um cãoname
e um botão "Excluir Cão".Adicionar um onPress evento no botão "Excluir cão" que chama o
deleteDog()
método do 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
Não use objetos após excluir
Não é possível acessar ou modificar um objeto depois de excluí-lo de um realm. Se tentar usar um objeto excluído, o Realm exibirá um erro.
Excluir vários objetos
Você pode excluir vários objetos de um realm de algumas maneiras:
Para excluir todos os objetos de um determinado tipo de objeto de um realm, passe os resultados do useQuery(<ObjectType>) para o método Realm.delete() dentro de uma transação de gravação.
Para excluir muitos objetos específicos de um domínio, passe Collection.filtered() para
Realm.delete()
dentro de uma transação por escrito.
No exemplo a seguir de um componente DogList
, nós:
Recupere a instância de domínio usando o hook
useRealm()
.Defina uma variável
myDogs
para todos os objetosDog
passando a classeDog
para o hookuseQuery()
.Crie um método de componente
deleteAllYoungDogObjects()
que execute uma transação de escrita. Na transação de escrita, definimos uma variável,youngDogs
, como o resultado demyDogs.filtered()
com uma query para obter todos os cães com menos de três anos. Em seguida, passeyoungDogs
pararealm.delete()
, excluindo todos os cães jovens do realm.Crie um método de componente
deleteAllDogObjects()
que realize uma transação de escrita. Na transação de escrita, passamosmyDogs
pararealm.delete()
, excluindo todos os cães do domínio.Map através dos cães para renderizar uma lista de
Text
componentes do que contêmname
e umage
cão.Adicione um evento
onPress
no botão "Excluir objetos de cães jovens" que chamadeleteAllYoungDogObjects()
, excluindo todos os cães jovens do Realm, o que aciona uma renderização novamente e a remove da UI.Adicione um evento
onPress
no botão "Excluir todos os objetos de cães" que chamadeleteAllDogObjects()
, excluindo todos os cães do domínio, o que aciona uma renderização e os remove da UI.
Observação
Quando você exclui objetos da instância de domínio, o componente automaticamente os renderiza novamente e os remove da interface do usuário.
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' /> </> ); };
Excluir todos os objetos em um Realm
Para excluir todos os objetos do realm, chame Realm.deleteAll() dentro de uma transação de gravação. Isso limpa o realm de todas as instâncias de objeto, mas não afeta o esquema do realm.
No exemplo a seguir de um componente DeleteProfileSettingsScreen
, nós:
Conseguir acesso à instância do domínio aberta chamando o gancho
useRealm()
dentro do componente.Crie um
deleteAllData()
de método de componente que execute uma transação de escrita e chameRealm.deleteAll()
, excluindo todos os objetos do domínio.Adicione um evento
onPress
no botão "Excluir todos os dados" que chamadeleteAllData()
.
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' /> </> ); };
Dica
Excluir tudo em desenvolvimento
Realm.deleteAll() é um método útil para limpar rapidamente seu domínio no decorrer do desenvolvimento. Por exemplo, em vez de gravar uma migração para atualizar objetos para um novo esquema, pode ser mais rápido excluir e gerar novamente os objetos com o próprio aplicativo.