当前位置: 首页 > article >正文

鸿蒙状态管理

我们开发中构建的页面多为静态页面。如果希望构建一个动态的,有交互的界面,就需要引入‘状态’的概念

用户构建了一个UI模型,其中应用的运行时的状态是参数,当参数改变时,UI作为返回结果,也将进行对应的改变。状态变化带来UI的重新渲染。

自定义组件拥有变量所谓属性,必须被装饰器修饰才可以成为状态变量,状态变量的改变会引起UI的渲染刷新,如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。

State状态:驱动UI更新的数据,用户通过触发组件的事件方法,改变状态数据。状态数据的改变,引起UI的重新渲染,只能在@component装饰修饰的组件中使用

常规变量:没有被状态装饰器修饰的变量,通常应用于辅助计算。它的改变不会引起UI的刷新。

数据源/同步源:状态变量的原始来源,可以同步给不同的状态数据,通常意义为父组件传给子组件的数据,以下示例中数据源为count:1

命名参数机制:父组件通过指定参数传递给子组件的状态变量,为父子传递同步参数的主要手段。示例CompA({aProp:this.aProp})

从父组件初始化,父组件使用命名参数机制,将指定参数传递给子组件。子组件初始化的默认值在有父组件传值的情况下,会被覆盖

@Component
struct MyComponent {
  @State count: number = 0;
  private increaseBy: number = 1;

  build() {
  }
}

@Component
struct Parent {
  build() {
    Column() {
      // 从父组件初始化,覆盖本地定义的默认值
      MyComponent({ count: 1, increaseBy: 2 })
    }
  }
}

装饰器总览

ArkUI状态管理提供了多种装饰器,通过使用这些装饰器,状态变量不仅可以观察在组件内的改变,还可以在不同组件层级间传递(也就是在挂载View里面的传值),比如父子组件(单页面挂载的子视图),跨组件(跨页面,比如push)层级,也可以观察全局范围内的变化(比如AppStorage修饰的)。根据状态变量的影响范围,将所有的装饰器可以大致分为
1.组件级别的状态管理,可以观察组件内变化,和不同组件层级的变化,但需要同一个页面内

2.可以观察不同页面,甚至不同UIAbility的状态变化。是应用内全局的状态管理

从数据传递的同步类型层面可以分为

1.只读的单项传递
2.可变更的双向传递

在这里插入图片描述

上图,Component为组件级别的状态管理,单页面内的
Application为应用管理的状态管理。
开发者可以通过@StorageLimk实现应用状态的双向同步
可以通过@LocalStorageLikn实现单页面组件状态的双向同步
可以通过@StorageProp实现应用的单向同步
可以通过@LocalStorageProp实现单页面组件状态的单向同步

管理组件拥有的状态,即图中Components级别的状态管理

@state:@State装饰的变量拥有其所属组件的状态,可以作为其子组件单向和双向同步的数据源,当其数值改变时,会引起相关组件的渲染刷新

@state装饰的变量与子组件中的@Prop装饰变量之间建立单向数据同步,与@Link,@ObjectLink装饰变量之间建立双向数据同步

@State装饰的变量生命周期与其所属自定义的生命周期相同

@Prop:@Prop装饰的变量可以和父组件建立单向同步关系,@Prop装饰的变量时可变的,但修改不会同步回父组件

@Link:@Link装饰的变量可以和父组件建立双向同步关系,子组件中@Link装饰变量的修改会同步给父组件中,建立双向数据绑定的数据源,父组件的更新也会同步给@Link装饰的变量

@P


http://www.kler.cn/a/292475.html

相关文章:

  • 如何在Mac上切换到JDK 17开发环境
  • 跟着尚硅谷学vue2—基础篇4.0
  • Go八股(Ⅴ)map
  • STM32 51单片机设计半导体制冷片温控设计
  • 家政服务小程序,家政行业数字化发展下的优势
  • Java:解决因为大小写不规范导致的接收不到数据
  • 拍卖新纪元:Spring Boot赋能在线拍卖解决方案
  • shell 学习笔记:数组
  • 智慧平台赋能政务管理,声通科技助力政务管理智能化
  • echarts加载地图svg
  • PostgreSQL技术内幕5:PostgreSQL存储引擎从磁盘到内存的读取
  • sed和awk编辑器
  • 二级菜单的两种思路(完成部分)
  • Day12_0.1基础学习MATLAB学习小技巧总结(12)——程序流程控制3-switch结构
  • C语言:基本数据类型 char, short int, int
  • 使用 fetch() 函数和 Response 对象的示例,创建一个新的 Response 对象来模拟一个自定义响应
  • 深入解析 Node.js 核心模块与异步编程:高效构建现代服务器应用
  • 【TS高频面试题】interface与type的区别
  • 【原创】java+springboot+mysql企业产品销售管理系统设计与实现
  • 空间数据库
  • 新书分享|ChatGLM3大模型本地化部署、应用开发与微调(附PDF)
  • 打卡第五十七天:prim与kruskal算法
  • 人生苦短我用Python excel转csv
  • 麒麟安全加固工具,为系统打造坚固“金钟罩”!
  • 微软云技术深度解析与代码使用案例
  • Python 人脸识别实战教程