为何使用扩展运算符返回Realm对象仅保留icons属性?
问题原因分析
核心问题出在Realm查询返回的ProjectType实例并非普通JavaScript对象,而是Realm的代理对象(Realm.Object):
- 原代码中直接修改
projectType.icons后返回原对象,此时返回的仍是Realm的代理实例。这类代理对象依赖Realm内部机制来访问所有存储的属性,所以能完整保留原有的所有键值对。 - 改用
{ ...projectType, icons }展开时,JS的展开运算符只会遍历对象自身的可枚举属性。但Realm为了性能和数据一致性,并没有将实体的所有属性暴露为普通对象的可枚举属性——大部分属性是通过Realm内部的getter/setter来访问的,无法被...运算符捕获。最终生成的普通对象就只包含icons和极少数可枚举属性,原有的其他键值对自然丢失。
如果想用展开的方式得到完整属性的普通对象,可以先调用Realm对象的toJSON()方法,将其转为标准可枚举的JS对象后再展开:
return { ...projectType.toJSON(), icons }
内容的提问来源于stack exchange,提问作者Yuval Levi
相关产品推荐
相关产品推荐

