React Native Realm 11.0.0中Embedded Objects无法使用求助
React Native Realm 11.0.0 嵌入式对象创建报错解决:Embedded objects cannot be created directly
错误原因
嵌入式对象(Embedded Object)的核心特性是必须依附父对象存在,不能独立创建。你当前代码先单独调用realm.create(Task, ...)生成Task实例,再关联到Project的写法,违反了Realm对嵌入式对象的约束,因此触发报错。
修复方案
直接在创建父对象(Project)时,将嵌入式对象(Task)的数据作为父对象属性的一部分传入,让Realm自动完成嵌入式对象的创建与关联。
修改后的完整代码
import React from "react"; import { View, Text } from "react-native"; import Realm from "realm"; export class Project extends Realm.Object<Project> { public _id: number; public name: string; public tasks: Realm.List<Task>; static schema = { name: "Project", primaryKey: "_id", properties: { _id: "int", name: "string", tasks: { type: "list", objectType: "Task" }, }, }; } export class Task extends Realm.Object<Task> { public description: string; static schema = { name: "Task", embedded: true, // 保持开启状态 properties: { description: "string", }, }; } (async () => { let realm: any; try { realm = await Realm.open({ inMemory: true, schema: [Project, Task], }); } catch (e) { console.error(e.message); } try { realm.write(() => { // 直接在创建Project时传入tasks的数据,无需单独创建Task实例 realm.create(Project, { _id: 1, name: "P1", tasks: [ { description: "T1" }, { description: "T2" } ], }); }); } catch (e) { console.error(e.message); } console.log(JSON.stringify(realm.objects(Project), null, 3)); realm.close(); })(); export const App = () => { return ( <View style={{ flex: 1, justifyContent: "center", alignItems: "center" }}> <Text style={{ fontSize: 25 }}>Please look at the console</Text> </View> ); };
关键修改点
- 删除单独调用
realm.create(Task, ...)生成Task实例的代码 - 在创建Project的
realm.create调用中,直接在tasks字段传入Task的数据对象数组,Realm会自动将这些数据转化为嵌入式Task对象并关联到Project上
修改后嵌入式对象即可正常工作,控制台会输出包含tasks列表的Project数据。
内容的提问来源于stack exchange,提问作者u2gilles
相关产品推荐
相关产品推荐

