Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

CRUD - 删除 - React Native SDK

在此页面上

  • 删除对象
  • 删除多个对象
  • 删除 Realm 中的所有对象

本页中的示例使用以下模式:

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 组件示例中,我们:

  1. 调用 useRealm() 钩子以访问打开的 Realm 实例。

  2. 通过将 Dog 传递给 useQuery() 挂钩来检索 Realm 实例中的所有犬。

  3. 创建一个将 Dog 对象用作参数的组件方法 deleteDog()。在此方法中,将 Dog 对象传递给 Realm.delete(),从而将其从 Realm 中删除。

  4. 映射 通过dogs呈现一个Text 组件列表,其中包含dog的name 和“Delete Dog”按钮。

  5. 添加 onPress 调用组件的 方法的“DeletedeleteDog() 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 中删除多个对象:

  1. 要从域中删除给定对象类型的所有对象,请在写事务中将 useQuery(<ObjectType>) 的结果传递给 Realm.delete() 方法。

  2. 要从 Realm 中删除许多特定对象,请将Collection.filtered()传递给写事务内的Realm.delete()

在以下 DogList 组件示例中,我们:

  1. 使用 useRealm() 挂钩来检索 Realm 实例。

  2. 通过将 Dog 类传递给 useQuery() 挂钩,将变量 myDogs 设为所有 Dog 对象。

  3. 创建用于执行写事务的组件方法 deleteAllYoungDogObjects()。在写事务中,通过查询将变量 youngDogs 设为 myDogs.filtered() 的结果,从而获取年龄在三岁以下的所有犬。然后,将 youngDogs 传递给 realm.delete(),以便从 Realm 中删除所有幼犬。

  4. 创建用于执行写事务的组件方法 deleteAllDogObjects()。在写事务中,将 myDogs 传递给 realm.delete(),以便从 Realm 中删除所有犬。

  5. 地图 通过狗来呈现 组件列表,其中包含狗的Text nameage

  6. 对用于调用 deleteAllYoungDogObjects() 的“Delete Young Dog Objects”(删除幼犬对象)按钮添加 onPress 事件,以便从 Realm 中删除所有幼犬,从而触发重新呈现并将这些犬从用户界面中删除。

  7. 对用于调用 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.deleteAll() 在一个写事务(write transaction)中。 这会清除域中的所有对象实例,但不影响 Realm 的模式。

在以下 DeleteProfileSettingsScreen 组件示例中,我们:

  1. 通过调用该组件中的 useRealm() 挂钩来访问打开的 Realm 实例。

  2. 创建用于执行写事务并调用 Realm.deleteAll() 的组件方法 deleteAllData(),以便从 Realm 中删除所有对象。

  3. 对用于调用 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'
/>
</>
);
};

提示

删除所有开发中的内容

Realm.deleteAll()是一种在开发过程中快速清除域的有用方法。 示例,与编写迁移以将对象更新到新模式相比,先删除对象再使用应用自身重新生成对象可能速度更快。

后退

Update