Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

CRUD - Excluir - React Native SDK

Nesta página

  • Excluir um objeto
  • Excluir vários objetos
  • Excluir todos os objetos em um Realm

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

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:

  1. Obter acesso a uma instância de realm aberta chamando a função hook useRealm().

  2. Recupere todos os cães na instância do domínio passando Dog para o hook useQuery().

  3. Crie um método de componente deleteDog() que receba um objeto Dog como parâmetro. Dentro do método, passamos Realm.delete() o objeto Dog, excluindo-o do domínio.

  4. Mapa através dos cães para renderizar uma lista de Text componentes do que contêm um cão name e um botão "Excluir Cão".

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

Você pode excluir vários objetos de um realm de algumas maneiras:

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

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

  1. Recupere a instância de domínio usando o hook useRealm().

  2. Defina uma variável myDogs para todos os objetos Dog passando a classe Dog para o hook useQuery().

  3. 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 de myDogs.filtered() com uma query para obter todos os cães com menos de três anos. Em seguida, passe youngDogs para realm.delete(), excluindo todos os cães jovens do realm.

  4. Crie um método de componente deleteAllDogObjects() que realize uma transação de escrita. Na transação de escrita, passamos myDogs para realm.delete(), excluindo todos os cães do domínio.

  5. Map através dos cães para renderizar uma lista de Text componentes do que contêm name e um age cão.

  6. Adicione um evento onPress no botão "Excluir objetos de cães jovens" que chama deleteAllYoungDogObjects(), excluindo todos os cães jovens do Realm, o que aciona uma renderização novamente e a remove da UI.

  7. Adicione um evento onPress no botão "Excluir todos os objetos de cães" que chama deleteAllDogObjects(), 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'
/>
</>
);
};

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:

  1. Conseguir acesso à instância do domínio aberta chamando o gancho useRealm() dentro do componente.

  2. Crie um deleteAllData() de método de componente que execute uma transação de escrita e chame Realm.deleteAll(), excluindo todos os objetos do domínio.

  3. Adicione um evento onPress no botão "Excluir todos os dados" que chama 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'
/>
</>
);
};

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.

Voltar

Update