CRUD - 删除 - React Native SDK
本页中的示例使用以下模式:
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 中删除。添加 onPress 调用组件的 方法的“Delete
deleteDog()
Dog”按钮上的事件。
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 中删除所有犬。地图 通过狗来呈现 组件列表,其中包含狗的
Text
name
和age
。对用于调用
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' /> </> ); };