本页中的示例使用以下模式:
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?', }, }; }
删除对象
要从域中删除对象,请将该对象传递给 Realm。 删除() 在一个写事务(write transaction)中。
在以下 DogList 组件示例中,我们:
调用
useRealm()钩子以访问打开的 Realm 实例。通过将
Dog传递给useQuery()挂钩来检索 Realm 实例中的所有犬。创建一个将
Dog对象用作参数的组件方法deleteDog()。在此方法中,将Dog对象传递给Realm.delete(),从而将其从 Realm 中删除。在“Delete Dog”(删除狗)按钮上添加一个onPress事件,用于调用组件的
deleteDog()方法。
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' /> </> ); })} </> ); };
重要
请勿在删除对象后使用该对象
将某一对象从 Realm 中删除后,便无法访问或修改该对象。如果尝试使用已删除的对象,Realm 则会引发错误。
删除多个对象
您可通过以下几种方式从 Realm 中删除多个对象:
要从域中删除给定对象类型的所有对象,请在写事务中将 useQuery(<ObjectType>) 的结果传递给 Realm.delete() 方法。
要从 Realm 中删除许多特定对象,请将Collection.filtered()传递给写事务内的
Realm.delete()。
在以下 DogList 组件示例中,我们:
使用
useRealm()挂钩来检索 Realm 实例。通过将
Dog类传递给useQuery()挂钩,将变量myDogs设为所有Dog对象。创建用于执行写事务的组件方法
deleteAllYoungDogObjects()。在写事务中,通过查询将变量youngDogs设为myDogs.filtered()的结果,从而获取年龄在三岁以下的所有犬。然后,将youngDogs传递给realm.delete(),以便从 Realm 中删除所有幼犬。创建用于执行写事务的组件方法
deleteAllDogObjects()。在写事务中,将myDogs传递给realm.delete(),以便从 Realm 中删除所有犬。通过犬进行映射 以呈现包含犬的
name和age的Text组件列表。对用于调用
deleteAllYoungDogObjects()的“Delete Young Dog Objects”(删除幼犬对象)按钮添加onPress事件,以便从 Realm 中删除所有幼犬,从而触发重新呈现并将这些犬从用户界面中删除。对用于调用
deleteAllDogObjects()的“Delete All Dog Objects”(删除所有犬对象)按钮添加onPress事件,以便从 Realm 中删除每只犬,从而触发重新呈现并将这些犬从用户界面中删除。
注意
从 Realm 实例中删除对象时,该组件会自动重新呈现并将这些对象从用户界面中删除。
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' /> </> ); };
删除 Realm 中的所有对象
要删除域中的所有对象,请调用Realm.deleteAll() 在一个写事务(write transaction)中。 这会清除域中的所有对象实例,但不影响 Realm 的模式。
在以下 DeleteProfileSettingsScreen 组件示例中,我们:
通过调用该组件中的
useRealm()挂钩来访问打开的 Realm 实例。创建用于执行写事务并调用
Realm.deleteAll()的组件方法deleteAllData(),以便从 Realm 中删除所有对象。对用于调用
deleteAllData()的“Delete all data”(删除所有数据)按钮添加onPress事件。
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' /> </> ); };