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
Dogpara o hookuseQuery().Crie um método de componente
deleteDog()que receba um objetoDogcomo parâmetro. Dentro do método, passamosRealm.delete()o objetoDog, excluindo-o do domínio.Mapeie através dos cães para renderizar uma lista de
Textcomponentes do que contêm de um cãonamee um botão "Excluir Cão".Adicione um evento onPress no botão "Excluir cão" que chama o método
deleteDog()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
myDogspara todos os objetosDogpassando a classeDogpara 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, passeyoungDogspararealm.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, passamosmyDogspararealm.delete(), excluindo todos os cães do domínio.Mapeie através dos cães para renderizar uma lista de componentes do
Textque contêmnameeagede um cão.Adicione um evento
onPressno 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
onPressno 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
onPressno 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.