Docs 菜单

Docs 主页开发应用程序Atlas Device SDKs

CRUD — 更新 — React Native SDK

在此页面上

  • 更新对象
  • 更新或插入(upsert)对象
  • 批量更新集合

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

您可以像更新任何其他 JavaScript 对象那样添加、修改或删除 Realm 对象的属性。但是,您必须在写事务内执行这些操作。

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

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

  2. 使用“Task”(任务)以及该组件的 _id 参数来调用 useObject(),从而检索任务。

  3. 创建组件方法 incrementTaskProgress(),用于执行写事务并递增任务的 progressMinutes

  4. 在用户界面中呈现任务的 nameprogressMinutes

  5. 添加 onPress 调用incrementTaskProgress() 的“增量”按钮上的事件。

提示

更新相关对象和嵌入式对象

要更新 嵌入式对象 相关对象 的属性,请使用 点符号或方括号符号 修改该属性 就像在常规的嵌套对象中一样。

要在写事务中更新或插入对象,请调用Realm.create()并将更新模式设置为modified 。该操作要么插入具有给定主键的新对象,要么更新已具有该主键的现有对象。

注意

Upsert 操作需使用 Realm.create()

必须 Realm.create()在写事务中调用 才能更新或插入对象。这 不同于 通过调用 新 的 操作符。

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

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

  2. 执行写事务并创建一个 Task 对象,且该对象的 _id 值为 1234

  3. 在此写事务中调用 Realm.create(),从而通过指定相同的 _id 和不同的“progressMinutes”并将更新模式设为“已修改”来更新或插入 Task 对象。

  4. 在用户界面中呈现任务的 nameprogressMinutes,显示修改的进度。

要将更新应用于对象集合,请遍历该集合(例如,使用 for...of )。在循环中,单独更新每个对象。

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

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

  2. 通过将 Task 传递给 useQuery() 钩子来检索 Realm 实例中的所有任务。

  3. 创建用于执行写事务的组件方法 resetProgressOnAllTasks()。在该写事务中,通过使用 for...of 来循环遍历所有任务并将这些任务的 progressMinutes 设为 0,从而批量更新所有任务。

  4. 地图 通过任务呈现Text 组件列表,其中显示每个任务的nameprogressMinutes

const TaskDashboard = () => {
const realm = useRealm();
const tasks = useQuery(Task);
const resetProgressOnAllTasks = () => {
realm.write(() => {
for (const task of tasks) {
task.progressMinutes = 0;
}
});
};
return (
<>
{tasks.map(task => {
<Text>
{task.name} has {task.progressMinutes} minutes progressed
</Text>;
})}
<Button
onPress={resetProgressOnAllTasks}
title='Reset Progress'
/>
</>
);
};
← CRUD — 读取 — React Native SDK