Realm Schema中箭头函数默认值能否访问对象其他字段?
问题解答
首先明确:你没法在Realm字段的箭头函数默认值里访问对象的其他字段,原因有两个:
- 箭头函数的
this不会指向Realm对象,它继承的是定义时的外层作用域this; - 默认值函数是在对象实例完全创建之前执行的,这时候
rowId的值还没绑定到对象上,自然拿不到。
给你几个可行的解决方案:
方案1:创建对象时手动同步赋值
先提前生成UUID,创建对象时同时传给两个字段,最直接简单:
const sharedUuid = new BSON.UUID(); const yourModelInstance = realm.create('YourModelName', { rowId: sharedUuid, branchId: sharedUuid });
方案2:利用Realm的afterCreate生命周期钩子
在Schema里定义afterCreate钩子,对象创建完成后自动把branchId设为rowId的值,适合不想每次创建都手动写的场景:
const YourModelSchema = { name: 'YourModelName', properties: { rowId: { type: 'uuid', default: () => new BSON.UUID() }, branchId: 'uuid' // 不要设默认值,交给钩子处理 }, afterCreate(obj) { // 对象创建完成后,直接赋值 obj.branchId = obj.rowId; } };
注意:别用计算属性来实现——计算属性是动态依赖的,后续更新rowId时branchId会自动跟着变,不符合你后续只更新其中一个字段的需求。
内容的提问来源于stack exchange,提问作者LiohAu
相关产品推荐
相关产品推荐

