鸿蒙Next中全局变量如何使用

在鸿蒙Next开发中,如何正确使用全局变量?比如在多个页面或组件间共享数据时,应该通过什么方式定义和调用全局变量?是否有推荐的最佳实践或注意事项?

2 回复

在鸿蒙Next中,全局变量可通过AppStorageLocalStorage实现跨组件共享数据。

1. AppStorage(应用全局存储)

  • 使用AppStorage.SetOrCreate(key, value)设置变量,如AppStorage.SetOrCreate('count', 0)
  • 通过@StorageLink('count') count: number在组件内双向绑定,修改后自动同步到全局。

2. LocalStorage(页面级存储)

  • EntryAbility中初始化:
    let storage = new LocalStorage();
    storage.setOrCreate('username', '张三');
    
  • 页面通过@LocalStorageLink('username') name: string绑定数据。

注意:

  • 优先使用LocalStorage避免全局污染
  • 复杂数据建议用AppStorage配合持久化
  • 通过@StorageProp可实现单向同步

示例代码:

// 设置全局变量
AppStorage.SetOrCreate('theme', 'dark');

// 组件中使用
@StorageLink('theme') theme: string = 'dark';

简单场景直接用AppStorage,复杂页面级状态用LocalStorage即可。

更多关于鸿蒙Next中全局变量如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next(HarmonyOS NEXT)中,全局变量可以通过以下方式实现:

1. 使用 AppStorage(推荐)

AppStorage 是应用级别的全局状态管理,适合存储全局共享的数据。

示例代码:

import { AppStorage } from '@kit.ArkData';

// 设置全局变量
AppStorage.setOrCreate('globalVar', '初始值');

// 获取全局变量
let value = AppStorage.get('globalVar');

// 监听变化
AppStorage.link('globalVar', (newValue) => {
  console.log('全局变量更新:', newValue);
});

2. 使用 LocalStorage

适用于页面间共享数据,需在页面入口初始化。

示例代码:

// 在页面入口初始化
let storage = new LocalStorage();
storage.set('sharedVar', 123);

// 在组件中使用
@Entry(storage)
@Component
struct MyComponent {
  @LocalStorageLink('sharedVar') sharedVar: number = 0;
}

3. 使用全局单例类

通过 TypeScript/JavaScript 模块化特性实现。

示例代码:

// GlobalState.ts
export class GlobalState {
  private static instance: GlobalState;
  public globalData: string = '默认值';

  static getInstance(): GlobalState {
    if (!GlobalState.instance) {
      GlobalState.instance = new GlobalState();
    }
    return GlobalState.instance;
  }
}

// 在其他文件中使用
import { GlobalState } from './GlobalState';
const globalState = GlobalState.getInstance();
console.log(globalState.globalData);

注意事项:

  • 响应式更新:使用 @StorageLinkAppStorage.link 确保 UI 同步更新。
  • 数据类型:支持基本类型、对象、数组等。
  • 生命周期:AppStorage 数据随应用进程存在,LocalStorage 与页面绑定。

根据具体场景选择合适方案,推荐优先使用 AppStorage 进行全局状态管理。

回到顶部