现在所有的变量声明以及逻辑实现都在UI页面上实现,如下:
@Entry
@Component
struct SetPasswordPage {
@State inputAccount: string = "";
@State inputPassword: string = "";
@State inputCode: string = "";
@State enableAgree: boolean = false;
@State enableLogin: boolean = false;
如果将所有逻辑以及状态定义都放在同一个压面,那会导致页面代码太多不利于维护,我想对UI和逻辑之间进行解耦。
希望实现一个类似MVVM框架,将状态数据以及逻辑实现放到ViewModel去中实现,这样的话UI就只实现绘制部分,至于UI和数据之间的关联通过ViewModel之间的状态提升去通知重绘,
我尝试过自己搭建但是总有一点差强人意,是否有官网框架或者其他代码库有实现这个需求?
Model 数据源,可以是任何获取数据的api,方法。可以是从网络、缓存、数据库任意渠道获取。
View UI显示
ViewModel 定义交互接口,获取和处理数据
依赖关系:
View 与 页面数据绑定,持有ViewModel,页面交互调用ViewModel的接口触发
ViewModel 依赖 Model获取数据,更新UI数据
View和Model之间无依赖
HarmonyOS 应用中使用MVVM:
组件中的build函数,对应View层,提供页面布局,以及和UI数据的绑定关系
viewModel,根据UI上的交互入口定义接口,布局中的交互入口调用ViewModel的对应接口,触发业务逻辑
api接口对应Model,提供了原始数据,ViewModel通过处理这些数据来获取到UI数据
View层 (@Components修饰组件渲染的UI):
Model层:存储数据和相关逻辑的模型
ViewModel层:在ArkUI中,ViewModel是存储在自定义组件的状态变量、LocalStorage和AppStorage中的数据。