HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀
HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀 这个对象的字段如下
ObservedV2
export class VHKitBaseStyleType {
@Trace placeholderStyle: VHKitTextStyleType;
@Trace statusBarContentColor: string;
@Trace navBarHeight: number;
@Trace navBarBgColor: ResourceColor;
@Trace navBarBackIconColor: ResourceColor;
@Trace navBarLeftLabelColor: ResourceStr;
@Trace leftRightPadding: string | number;
@Trace navBarTitleColor: ResourceColor;
@Trace navBarTitleFontSize: string | number;
更多关于HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀的实战教程也可以访问 https://www.itying.com/category-93-b0.html
状态管理V2装饰器会为装饰的变量生成getter和setter方法,同时为原有变量名添加__ob_
的前缀,当前无法避免,详情请参考官方文档。
前缀不影响对象属性的getter和setter方法使用。
如果涉及序列化与反序列化,可通过如下方法,将前缀去除:
export function convertKeysToCamelCase(obj: ESObject): ESObject {
if (obj && typeof obj === 'object') {
const newObj: ESObject = {};
Object.keys(obj).forEach((key) => {
if (obj.hasOwnProperty(key)) {
const newKey = key.replace(/(__ob_)/g, '');
newObj[newKey] = convertKeysToCamelCase(obj[key]);
}
})
return newObj;
} else {
return obj;
}
}
更多关于HarmonyOS鸿蒙Next中被ObservedV2和Trace装饰后的对象存储到AppStorageV2,取出来的对象的key都带有_ob_这个怎么解决,不想要这个前缀的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:
-
补全复现代码和版本信息,让参与用户更快速复现您的问题;
-
更多提问技巧,请参考:【Tips】如何提个好问题
在HarmonyOS鸿蒙Next中,使用ObservedV2
和Trace
装饰的对象存储到AppStorageV2
时,系统会自动添加_ob_
前缀以标识被观察的对象。如果你不想要这个前缀,可以通过以下方式解决:
- 手动去除前缀:在从
AppStorageV2
取出对象后,手动去除_ob_
前缀。 - 自定义存储逻辑:在存储对象时,使用自定义的键名,避免系统自动添加前缀。
- 使用其他存储方式:如果不需要观察功能,可以考虑使用其他存储方式,如
LocalStorage
或PersistentStorage
,避免使用ObservedV2
和Trace
装饰器。
通过这些方法,你可以避免_ob_
前缀的出现。