未验证 提交 409436b3 编写于 作者: O openharmony_ci 提交者: Gitee

!21500 问题修改

Merge pull request !21500 from LiAn/master
......@@ -4,7 +4,7 @@
上一个章节中介绍的装饰器仅能在页面内,即一个组件树上共享状态变量。如果开发者要实现应用级的,或者多个页面的状态数据共享,就需要用到应用级别的状态管理的概念。ArkTS根据不同特性,提供了多种应用状态管理的能力:
- [LocalStorage](arkts-localstorage.md):页面级UI状态存储,通常用于[UIAbility](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-app-ability-uiAbility.md)内、页面间的状态共享。
- [LocalStorage](arkts-localstorage.md):页面级UI状态存储,通常用于[UIAbility](../reference/apis/js-apis-app-ability-uiAbility.md)内、页面间的状态共享。
- [AppStorage](arkts-appstorage.md):特殊的单例LocalStorage对象,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储;
......
# LocalStorage:页面级UI状态存储
LocalStorage是页面级的UI状态存储,通过\@Entry装饰器接的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。
LocalStorage是页面级的UI状态存储,通过\@Entry装饰器接的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。
本文仅介绍LocalStorage使用场景和相关的装饰器:\@LocalStorageProp和\@LocalStorageLink。
......@@ -28,7 +28,7 @@ LocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“
LocalStorage根据与\@Component装饰的组件的同步类型不同,提供了两个装饰器:
- [@LocalStorageProp](#localstorageprop)\@LocalStorageProp装饰的变量和与LocalStorage中给定属性建立单同步关系。
- [@LocalStorageProp](#localstorageprop)\@LocalStorageProp装饰的变量和与LocalStorage中给定属性建立单同步关系。
- [@LocalStorageLink](#localstoragelink)\@LocalStorageLink装饰的变量和在\@Component中创建与LocalStorage中给定属性建立双向同步关系。
......@@ -379,7 +379,7 @@ Child自定义组件中的变化:
### 将LocalStorage实例从UIAbility共享到一个或多个视图
上面的实例中,LocalStorage的实例仅仅在一个\@Entry装饰的组件和其所属的子组件(一个页面)中共享,如果希望其在多个视图中共享,可以在所属UIAbility中创建LocalStorage实例,并调用windowStage.[loadContent](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-window.md#loadcontent9)
上面的实例中,LocalStorage的实例仅仅在一个\@Entry装饰的组件和其所属的子组件(一个页面)中共享,如果希望其在多个视图中共享,可以在所属UIAbility中创建LocalStorage实例,并调用windowStage.[loadContent](../reference/apis/js-apis-window.md#loadcontent9)
```ts
......
......@@ -45,12 +45,12 @@
```ts
@Component
struct FancyUse {
@State heightVlaue: number = 100
@State heightValue: number = 100
@Styles fancy() {
.height(this.heightVlaue)
.height(this.heightValue)
.backgroundColor(Color.Yellow)
.onClick(() => {
this.heightVlaue = 200
this.heightValue = 200
})
}
}
......@@ -77,14 +77,14 @@
@Entry
@Component
struct FancyUse {
@State heightVlaue: number = 100
@State heightValue: number = 100
// 定义在组件内的@Styles封装的样式
@Styles fancy() {
.width(200)
.height(this.heightVlaue)
.height(this.heightValue)
.backgroundColor(Color.Yellow)
.onClick(() => {
this.heightVlaue = 200
this.heightValue = 200
})
}
......
......@@ -52,6 +52,51 @@
## 使用场景
### \@Watch和自定义组件更新
以下示例展示组件更新和\@Watch的处理步骤。count在CountModifier中由\@State装饰,在TotalView中由\@Prop装饰。
```ts
@Component
struct TotalView {
@Prop @Watch('onCountUpdated') count: number;
@State total: number = 0;
// @Watch cb
onCountUpdated(propName: string): void {
this.total += this.count;
}
build() {
Text(`Total: ${this.total}`)
}
}
@Entry
@Component
struct CountModifier {
@State count: number = 0;
build() {
Column() {
Button('add to basket')
.onClick(() => {
this.count++
})
TotalView({ count: this.count })
}
}
}
```
处理步骤:
1. CountModifier自定义组件的Button.onClick点击事件自增count。
2. 由于\@State count变量更改,子组件TotalView中的\@Prop被更新,其\@Watch('onCountUpdated')方法被调用,更新了子组件TotalView 中的total变量。
3. 子组件TotalView中的Text重新渲染。
### \@Watch与\@Link组合使用
......@@ -124,52 +169,6 @@ struct BasketModifier {
2. \@Link装饰的BasketViewer shopBasket值发生变化;
3. 状态管理框架调用\@Watch函数BasketViewer onBasketUpdated 更新BaketViewer TotalPurchase的值;
3. 状态管理框架调用\@Watch函数BasketViewer onBasketUpdated 更新BasketViewer TotalPurchase的值;
4. \@Link shopBasket的改变,新增了数组项,ForEach组件会执行item Builder,渲染构建新的Item项;\@State totalPurchase改变,对应的Text组件也重新渲染;重新渲染是异步发生的。
### \@Watch和自定义组件更新
以下示例展示组件更新和\@Watch的处理步骤。count在CountModifier中由\@State装饰,在TotalView中由\@Prop装饰。
```ts
@Component
struct TotalView {
@Prop @Watch('onCountUpdated') count: number;
@State total: number = 0;
// @Watch cb
onCountUpdated(propName: string): void {
this.total += this.count;
}
build() {
Text(`Total: ${this.total}`)
}
}
@Entry
@Component
struct CountModifier {
@State count: number = 0;
build() {
Column() {
Button('add to basket')
.onClick(() => {
this.count++
})
TotalView({ count: this.count })
}
}
}
```
处理步骤:
1. CountModifier自定义组件的Button.onClick点击事件自增count。
2. 由于\@State count变量更改,子组件TotalView中的\@Prop被更新,其\@Watch('onCountUpdated')方法被调用,更新了子组件TotalView 中的total变量。
3. 子组件TotalView中的Text重新渲染。
......@@ -269,7 +269,7 @@ struct Shopping {
![zh-cn_image_0000001562940549](figures/zh-cn_image_0000001562940549.gif)
Grid组件初始化时,可以绑定一个[Scroller](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-container-scroll.md/#scroller)对象,用于进行滚动控制,例如通过Scroller对象的[scrollPage](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-container-scroll.md/#scrollpage)方法进行翻页。
Grid组件初始化时,可以绑定一个[Scroller](../reference/arkui-ts/ts-container-scroll.md#scroller)对象,用于进行滚动控制,例如通过Scroller对象的[scrollPage](../reference/arkui-ts/ts-container-scroll.md#scrollpage)方法进行翻页。
```ts
......
......@@ -3,7 +3,7 @@
## 概述
[媒体查询](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/apis/js-apis-mediaquery.md/)作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景:
[媒体查询](../reference/apis/js-apis-mediaquery.md)作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景:
1. 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。
......@@ -260,4 +260,4 @@ struct MediaQueryExample {
基于媒体查询,可参考以下实例:
[媒体查询](https://gitee.com/openharmony/applications_app_samples/tree/master/code/UI/ArkTsComponentClollection/MediaQuery):使用媒体查询,完成在不同设备上显示不同的界面效果。
[媒体查询](https://gitee.com/openharmony/applications_app_samples/tree/master/code/UI/ArkTsComponentCollection/MediaQuery):使用媒体查询,完成在不同设备上显示不同的界面效果。
......@@ -3,7 +3,7 @@
## 概述
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过[Stack](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/reference/arkui-ts/ts-container-stack.md/)容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过[Stack](../reference/arkui-ts/ts-container-stack.md)容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。
层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册