Skip to content

LocalStorage 页面级存储

LocalStorage 是页面或 UIAbility 级的状态存储,用于多窗口数据隔离。


1. LocalStorage 基本用法

typescript
// 创建 LocalStorage 实例
let localStorage = new LocalStorage()

// 设置值
localStorage.setOrCreate('pageTheme', 'light')
localStorage.setOrCreate('currentPage', 1)

// 获取值
let theme = localStorage.get<string>('pageTheme')  // 'light'

// 删除
localStorage.delete('currentPage')

2.1 @LocalProp — 单向绑定

typescript
@Component
struct PageHeader {
    @LocalProp pageTheme: string = 'light'

    build() {
        Text(`页面主题: ${this.pageTheme}`)
    }
}
typescript
@Component
struct PageFooter {
    @LocalLink currentPage: number = 1

    build() {
        Row() {
            Button('-')
                .onClick(() => {
                    this.currentPage--
                })
            Text(`${this.currentPage}`)
            Button('+')
                .onClick(() => {
                    this.currentPage++
                })
        }
    }
}

3. LocalStorage 的应用场景

3.1 多窗口数据隔离

UIAbility (窗口1)                    UIAbility (窗口2)
┌───────────────────┐              ┌───────────────────┐
│ LocalStorage       │              │ LocalStorage       │
│ pageTheme: light   │              │ pageTheme: dark    │
│ currentPage: 1     │              │ currentPage: 3     │
│                    │              │                    │
│ 独立状态 ✅        │              │ 独立状态 ✅        │
└───────────────────┘              └───────────────────┘

3.2 页面状态恢复

typescript
@Entry
@Component
struct Index {
    private localStorage = new LocalStorage({ pageName: 'Index' })

    @LocalProp pageTheme: string = 'light'
    @LocalLink currentPage: number = 1

    aboutToAppear() {
        // 从 LocalStorage 恢复页面状态
        this.currentPage = this.localStorage.get<number>('currentPage') || 1
    }

    build() {
        Column() {
            Text(`第 ${this.currentPage} 页`)
            // ...
        }
    }
}

4. 使用决策

需要全局共享?
├─ 是 → AppStorage(所有 UIAbility 共享)
└─ 否 → 需要多窗口隔离?
    ├─ 是 → LocalStorage(每个窗口独立)
    └─ 否 → @State(组件内部私有)

5. 面试高频考点

Q1: LocalStorage 的作用?

回答:页面级或 UIAbility 级的状态存储,用于多窗口数据隔离。每个窗口有独立的 LocalStorage。

Q2: AppStorage vs LocalStorage 的区别?

回答:AppStorage 是应用全局(所有 UIAbility 共享),LocalStorage 是页面/Ability 级(多窗口隔离)。


🐱 小猫提示:LocalStorage 记住 "页面级、多窗口隔离、@LocalProp/@LocalLink"