HarmonyOS鸿蒙Next中请问更新WEDDING_NEWCOMER_STORE 全局变量对象,@StorageProp能获取到变化的值吗
HarmonyOS鸿蒙Next中请问更新WEDDING_NEWCOMER_STORE 全局变量对象,@StorageProp能获取到变化的值吗 请问更新WEDDING_NEWCOMER_STORE 全局变量对象,@StorageProp能获取到变化的值吗

更多关于HarmonyOS鸿蒙Next中请问更新WEDDING_NEWCOMER_STORE 全局变量对象,@StorageProp能获取到变化的值吗的实战教程也可以访问 https://www.itying.com/category-93-b0.html
名字不同这细节。
温馨提示:AppStorage只在主线程使用,taskpool和worker线程里不支持AppStorage。
分情况。
如果你这样更新:
AppStorage.SetOrCreate('WEDDING_NEWCOMER_STORE', newObj)
或者整体重新赋值一个新对象,@StorageProp 能感知到变化,会刷新。
但如果只是改对象内部字段:
this.newcomer.xxx = 'xxx'
这种深层属性修改默认不一定触发 @StorageProp 响应更新,因为 @StorageProp 主要监听的是 key 对应引用是否变化,不是对象内部每个字段的细粒度监听。
你图里的:
AppStoreUtil.setOrProp(Commons.WEDDING_USER_STORE, this.currentUser)
如果 this.currentUser 只是原对象改完再 set 回去,可能因为引用没变,页面上的:
@StorageProp(...)
newcomer
不一定触发更新。
稳妥写法是重新创建新对象再 set:
const newValue = {
...this.currentUser,
mood: mood
}
AppStorage.SetOrCreate(Commons.WEDDING_NEWCOMER_STORE, newValue)
这样引用变了,@StorageProp 一定能收到。
一句话:
@StorageProp 更可靠监听“对象整体替换”,不要依赖对象内部属性原地修改触发更新。
@StorageProp 和 AppStorage 是单向同步关系:
当 AppStorage 中同一个 key 的值发生变化时,绑定这个 key 的 @StorageProp 会同步拿到新值;但它只是不回写 AppStorage,本地改动还会被 AppStorage 后续更新覆盖。
你这里必须是同一个 key,如果你更新的是 WEDDING_NEWCOMER_STORE,那么 @StorageProp(WEDDING_NEWCOMER_STORE) 才会收到变化。
在状态管理 V1 里,普通对象场景主要能观察到对象整体替换和第一层属性变化。
也就是说,如果改的是 newcomer.mood 这种第一层属性,通常可以同步到。
但如果改的是更深层嵌套属性,比如 newcomer.xxx.yyy,就不一定能刷新,官方建议这种场景用 @Observed + @ObjectLink,或者直接上状态管理 V2。
**总结:**同 key,并且更新的是对象整体或第一层属性,@StorageProp 能拿到变化;不同 key 或深层对象属性变化,就不能指望它稳定感知。
应该可以的,加个Text测试一下,User类应该加@Observed修饰。
是的,
更新 WEDDING_NEWCOMER_STORE 所引用的对象属性时,@StorageProp 无法获取变化。因为 @StorageProp 仅监听存储的引用变化,不监听对象内部属性变动。若要触发更新,需整体赋值新对象。
在 HarmonyOS Next 中,@StorageProp 为单向同步,它会在组件内创建一个本地状态副本。当 AppStorage 中的键值整体被替换(即引用发生变化)时,@StorageProp 能收到通知并获取到新值,触发组件重新渲染。
但如果你只是更新 WEDDING_NEWCOMER_STORE 对象内部的某个属性(引用未变),@StorageProp 无法感知此变更,不会更新。要响应深层属性变化,应使用 @StorageLink 实现双向同步,或在更新时重新赋值整个对象(如通过 AppStorage.Set 替换新对象)。


