前言
本文主要是对于鸿蒙开发文档 ETS 开发中的 UI状态管理部分进行解读和简单的实践,方便更快的切入开发工作,构建应用。
鸿蒙状态管理简介
首先引用开发文档中的图片,图片中已经基本可以看出整个应用中的数据流动,非常全面
华为鸿蒙开发文档对于应用中状态的管理提供了丰富且全面的接口(仅提供通俗理解,具体定义见文档):
-
@State:用于定义应用管理的状态,更像是React16.8之后的useState,方便代码根据业务划分逻辑,状态定义仅支持class、number、boolean、string 及其组成的数组,并不允许object和any
-
@Props:单项数据流,父组件传递子组件,直接使用this.属性名向下传递数据,子组件使用此修饰器接收,推荐用于只渲染的数据用此定义
-
@Link:双向数据流,解决了vue中**emit**函数的功能,父组件用emit∗∗函数的功能,父组件用向下传递数据,子组件使用此修饰器接收,推荐需要在子组件中修改父组件状态的情况(即为类似于在vue中需要使用$emit)下使用
-
@Consume和**@Provide**: 其中provide是生产者,consume是消费者,写过react的开发者应该对此很熟悉,类似于react中的context上下文,这一对修饰器主要实现的是上层组件跨多层传值给下层组件,并实现双向绑定数据
-
@Observed和**@ObjectLink**:其中@Observed用于修饰类,@ObjectLink用于在子组件中修饰已经被@Observed修饰的类对应的状态(具体用法见下文),这一对修饰器主要解决的问题是,如果定义了一个包含多个对象(类)的数组,其中对象的属性发生变化,能够被应用监测到并更新视图
-
@Watch:在某一可被应用监测的状态发生修改的时候,执行某个额外的动作
-
AppStorage:
-
应用程序中的单例对象,由UI框架在应用程序启动时创建,在应用程序退出时销毁,为应用程序范围内的可变状态属性提供中央存储,简单来说就类似于vuex/redux
-
上述几个状态管理的修饰器,更多的是在同一个page中去使用,根据业务/页面逻辑划分组件,实现状态管理,父子组件传值,跨组件传值等
-
而AppStorage是在多页面(page文件夹下有多个@Enter定义页面)应用程序中用于跨页面共享数据。
-
建议AppStorage的使用在有
-