Docs 主页 → 开发应用程序 → Atlas Device SDKs
CRUD — 更新 — React Native SDK
本页中的示例使用以下模式:
更新对象
您可以像更新任何其他 JavaScript 对象那样添加、修改或删除 Realm 对象的属性。但是,您必须在写事务内执行这些操作。
在以下 TaskItem
组件示例中,我们:
通过调用该组件中的
useRealm()
挂钩来访问打开的 Realm 实例。使用“Task”(任务)以及该组件的
_id
参数来调用useObject()
,从而检索任务。创建组件方法
incrementTaskProgress()
,用于执行写事务并递增任务的progressMinutes
。在用户界面中呈现任务的
name
和progressMinutes
。添加 onPress 调用
incrementTaskProgress()
的“增量”按钮上的事件。
更新或插入(upsert)对象
要在写事务中更新或插入对象,请调用Realm.create()并将更新模式设置为modified
。该操作要么插入具有给定主键的新对象,要么更新已具有该主键的现有对象。
注意
Upsert 操作需使用 Realm.create()
您 必须 Realm.create()
在写事务中调用 才能更新或插入对象。这 不同于 通过调用 新 的 操作符。
在以下 CreateTaskItem
组件示例中,我们:
通过调用该组件中的
useRealm()
挂钩来访问打开的 Realm 实例。执行写事务并创建一个
Task
对象,且该对象的_id
值为1234
。在此写事务中调用
Realm.create()
,从而通过指定相同的_id
和不同的“progressMinutes”并将更新模式设为“已修改”来更新或插入Task
对象。在用户界面中呈现任务的
name
和progressMinutes
,显示修改的进度。
批量更新集合
要将更新应用于对象集合,请遍历该集合(例如,使用 for...of )。在循环中,单独更新每个对象。
在以下 TaskDashboard
组件示例中,我们:
通过调用该组件中的
useRealm()
挂钩来访问打开的 Realm 实例。通过将
Task
传递给useQuery()
钩子来检索 Realm 实例中的所有任务。创建用于执行写事务的组件方法
resetProgressOnAllTasks()
。在该写事务中,通过使用for...of
来循环遍历所有任务并将这些任务的progressMinutes
设为 0,从而批量更新所有任务。
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' /> </> ); };