@AppStorage装饰器语法糖,只能在 组件内 用,自动响应式刷新 UI。

AppStorageV2工具类 API,可在任何地方用(组件、工具类、工具函数、网络请求、全局逻辑),不自带响应式

简单说:一个是给页面用的,一个是给逻辑代码用的。

特性 @AppStorage AppStorageV2
类型 装饰器(@开头) 工具类(静态 API)
使用位置 只能在 @Component 组件内 任何地方:组件、工具类、服务、工具函数、网络
响应式 ✅ 自动响应式,数据变 → UI 自动刷新 不自动刷新 UI
同步方式 声明变量即用 手动 set /get
适用场景 页面状态、全局 UI 状态 业务逻辑、工具类、全局配置、非 UI 代码
是否属于 ArkUI 否(通用工具)

1)@AppStorage(组件内使用,响应式)

@Entry
@Component
struct PageA {
  // 组件内声明,自动响应式
  @AppStorage("userName") userName: string = "张三";

  build() {
    Text(this.userName) // 数据变,UI自动刷新
  }
}

2)AppStorageV2(任何地方都能用,非响应式)

// 工具类里也能用!!!
import { AppStorageV2 } from '@ohos.data.storage';

export class UserUtil {
  static setUserName(name: string) {
    // 存
    AppStorageV2.setOrCreate("userName", name);
  }

  static getUserName() {
    // 取
    return AppStorageV2.get("userName", "");
  }
}

组件里也能使用 AppStorageV2

@Entry
@Component
struct TestPage {
  build() {
    Button("测试").onClick(() => {
      AppStorageV2.setOrCreate("key", "value");
      let val = AppStorageV2.get("key", "");
    })
  }
}

四、真正的核心区别(面试必问)

1. @AppStorage 是基于 AppStorageV2 封装的!

鸿蒙底层:

  • AppStorageV2 = 全局内存存储的核心实现
  • @AppStorage = 给 UI 组件用的响应式包装

也就是说:@AppStorage 底层就是调用 AppStorageV2只是加了响应式监听 + UI 自动刷新功能。


2. @AppStorage 只能组件内用,AppStorageV2 全能用

  • 网络工具类 → 只能用 AppStorageV2
  • 全局工具函数 → 只能用 AppStorageV2
  • 页面组件 → 两个都能用,但推荐 @AppStorage

3. 响应式区别

  • @AppStorage:改值 → 所有页面自动刷新
  • AppStorageV2:改值 → 不刷新 UI

五、最实用的使用场景(开发必用)

1. 页面 / 组件需要自动刷新 → @AppStorage

如:全局主题、用户信息、登录状态、全局计数。

2. 工具类 / 网络请求 / 全局逻辑 → AppStorageV2

如:

  • 工具函数存配置
  • 网络请求头带 token
  • 全局服务类存储状态
  • 非 UI 逻辑

六、最简单记忆口诀

页面刷新用 @AppStorage
工具逻辑用 AppStorageV2

七、我再给你一个超级实用的例子(全局 token)

工具类(存 token)

import { AppStorageV2 } from '@ohos.data.storage';

export class TokenUtil {
  // 保存token
  static setToken(token: string) {
    AppStorageV2.setOrCreate("token", token);
  }

  // 获取token
  static getToken(): string {
    return AppStorageV2.get("token", "");
  }
}

页面组件(展示 token)

@Entry
@Component
struct PageA {
  @AppStorage("token") token: string = "";

  build() {
    Text("token:" + this.token) // 自动刷新
  }
}

最终总结(最精简)

  • @AppStorage组件内响应式自动刷新 UI
  • AppStorageV2任意位置手动存取不自动刷新
  • 关系:@AppStorage 底层基于 AppStorageV2 实现
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐