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

哪个网站有淘宝做图的素材做app和网站怎样

哪个网站有淘宝做图的素材,做app和网站怎样,网站开发与app开发的区别,wordpress 改变域名概述 在现代前端应用开发中,组件状态管理是一个至关重要的概念。组件状态是应用程序中的关键数据,控制着用户界面的呈现和行为,例如,一个按钮组件可能有一个disabled状态,用于控制按钮是否可用。在本文中,…

概述

在现代前端应用开发中,组件状态管理是一个至关重要的概念。组件状态是应用程序中的关键数据,控制着用户界面的呈现和行为,例如,一个按钮组件可能有一个disabled状态,用于控制按钮是否可用。在本文中,我们将深入介绍HarmonyOS的前端开发架构ArkUI的组件状态管理及在应用程序中如何有效地管理状态。

什么是ArkUI

ArkUI作为一种声明式UI,具有状态驱动UI更新的特点。当用户进行界面交互或有外部事件引起状态改变时,状态的变化会触发组件自动更新。所以在ArkUI中,我们只需要通过一个变量来记录状态。当改变状态的时候,ArkUI就会自动更新界面中受影响的部分。

ArkUI框架提供了多种管理状态的装饰器来修饰变量,使用这些装饰器修饰的变量即称为状态变量。

装饰器作用描述
@State用于声明组件的内部状态,使组件能够根据状态变化来重新渲染。
@Prop用于将父组件的属性传递给子组件,实现从父组件向子组件的数据传递。
@Link用于建立父子组件之间的双向数据绑定,以实现双向同步。
@Provide用于在跨组件层级中提供状态,允许其他组件使用 @Consume 装饰器来消费这些状态。用于全局状态管理或状态共享。
@Observed用于观察嵌套类对象属性的变化,以便能够捕获和响应嵌套属性的变化。
@ObjectLink类似于 @Observed,用于观察嵌套类对象属性的变化,以实现双向同步。
@Watch用于监听状态变化,并在状态变化时执行相应的操作,例如调用回调函数或触发特定的副作用。

接下来,我们将详细介绍每种装饰器的作用及其用法。

组件内的状态管理@State

要实现列表项的展开和收起功能,可以使用 @State 装饰器来定义一个名为 isExpanded 的状态变量。当用户点击列表项时,可以在 onClick 回调中切换 isExpanded 变量的值,以实现展开和收起效果。

@Component
export default struct TargetListItem {@State isExpanded: boolean = false;...build() {...Column() {...if (this.isExpanded) {Blank()ProgressEditPanel(...)}}.height(this.isExpanded ? $r('app.float.expanded_item_height')                  : $r('app.float.list_item_height')).onClick(() => {...this.isExpanded = !this.isExpanded;...})...}
}

从父组件单项同步状态@Prop

父组件

  1. 使用 @State 装饰器定义一个名为 isEditMode 的状态变量,表示编辑模式状态。

  2. 利用条件渲染来根据 isEditMode 的值显示不同的文本和按钮。

  3. 在用户点击事件发生时,通过回调函数改变 isEditMode 的值以触发界面更新。

@Component
export default struct TargetList {@State isEditMode: boolean = false;build() {Column() {Row() {// 根据 isEditMode 来条件渲染文本和按钮if (this.isEditMode) {// 显示取消、全选文本和勾选框// 显示删除按钮} else {// 显示 "编辑" 文本和 "添加子目标" 按钮}// 点击事件触发状态更新}// 渲染目标列表项List({ForEach(this.targetData, (item: TaskItemBean, index: number) => {ListItem() {TargetListItem({isEditMode: this.isEditMode,// 其他属性})}})})// 根据 isEditMode 来条件渲染按钮if (this.isEditMode) {Button("删除")} else {Button("添加任务")}}}
}

子组件

  1. 使用 @Prop 装饰器修饰子组件的 isEditMode 变量,定义子组件的编辑模式状态。

  2. 根据 isEditMode 的值控制目标项最右侧是否预留位置和显示勾选框。

@Component
export default struct TargetListItem {@Prop isEditMode: boolean;build() {Column() {// 根据 isEditMode 控制样式.padding({right: this.isEditMode ? "编辑模式的右边距" : "非编辑模式的右边距"})// 根据 isEditMode 控制显示勾选框if (this.isEditMode) {Row() {Checkbox()}}// 其他内容}}
}

最后,确保在父组件中使用子组件时,将父组件的编辑模式状态 this.isEditMode 传递给子组件的编辑模式状态 isEditMode

父子组件双向同步状态@Link

理解了您的要求,以下是精简后的内容,描述了如何在父子组件之间双向同步状态以实现列表项的切换功能:

父组件

  1. 使用 @State 装饰器定义 clickIndex 状态,用于记录被点击的目标项的索引。

  2. clickIndex 传递给子组件 TargetListItem,建立双向同步关系。

@Component
export default struct TargetList {@State clickIndex: number = 0;build() {...TargetListItem({clickIndex: $clickIndex,...})...}
}

子组件

  1. 使用 @Link 装饰器定义 clickIndex,以实现与父组件的双向同步。

  2. 使用 @Watch 装饰器监听 clickIndex 的变化,当状态发生变化时,触发回调函数 onClickIndexChanged

  3. onClickIndexChanged 回调函数中,判断当前列表项的索引是否与被点击的目标索引相等,如果不相等,则将 isExpanded 状态置为 false,实现目标项的收起。

@Component
export default struct TargetListItem {@Link @Watch('onClickIndexChanged') clickIndex: number;@State isExpanded: boolean = false;onClickIndexChanged() {if (this.clickIndex != this.index) {this.isExpanded = false;}}build() {....onClick(() => {...this.clickIndex = this.index;...})...}
}

这个过程中,父组件中的 clickIndex 与子组件中的 clickIndex 建立了双向同步关系。当用户点击不同的目标项时,clickIndex 会在父组件和子组件之间同步,从而实现了目标项的切换和展开/收起功能。

跨组件层级双向同步状态:@Provide和@Consume

  • @Provide 装饰器:用于将状态提供给后代组件。组件使用 @Provide 修饰的状态变量可以自动传递给其后代组件,使后代组件能够访问和使用这些状态。

  • @Consume 装饰器:用于感知并访问通过 @Provide 提供的状态。组件使用 @Consume 修饰的变量可以访问提供者组件的状态,并在状态更新时触发当前组件的重新渲染。

这种模式通常用于构建跨组件层级的状态管理,使得状态可以在组件树中自动传递,而且在状态更新时可以自动触发相关组件的重新渲染,以确保数据的一致性和实时性。

这个模式非常有用,特别是在大型应用程序中,它可以简化状态管理并提高代码的可维护性。通过 @Provide@Consume 装饰器,您可以轻松地传递和访问状态,而不必手动将状态从一个组件传递到另一个组件。这有助于减少样板代码,提高开发效率。


文章转载自:

http://g6jt6TDz.qyqmj.cn
http://tw3GWAlo.qyqmj.cn
http://KviNHcf3.qyqmj.cn
http://s7TP4zZf.qyqmj.cn
http://wMmRxJkR.qyqmj.cn
http://JQDcTxWU.qyqmj.cn
http://tGXx4FPj.qyqmj.cn
http://PYPtN7n8.qyqmj.cn
http://FCd0D2eE.qyqmj.cn
http://e88Q0KKw.qyqmj.cn
http://axzWtszW.qyqmj.cn
http://VxQSYWT5.qyqmj.cn
http://ME0BljYv.qyqmj.cn
http://QiRVO8lD.qyqmj.cn
http://QLgxgHxw.qyqmj.cn
http://vRXVkjRO.qyqmj.cn
http://JVYR4HiJ.qyqmj.cn
http://cCRDxFbq.qyqmj.cn
http://EMooPKgn.qyqmj.cn
http://trODDWKD.qyqmj.cn
http://z2pmJYlR.qyqmj.cn
http://2oA21m9s.qyqmj.cn
http://o4Pu2wfU.qyqmj.cn
http://oDuJyqyM.qyqmj.cn
http://yb4lGScF.qyqmj.cn
http://CN2tJqF8.qyqmj.cn
http://b4kkq6bW.qyqmj.cn
http://QIgbLvdI.qyqmj.cn
http://8ucK9GuG.qyqmj.cn
http://6jpDZP0q.qyqmj.cn
http://www.dtcms.com/wzjs/639142.html

相关文章:

  • 上海专业网站建设报宁波网络推广教程
  • 网站 简约漯河网做网站
  • 网站建设丶金手指下拉13江门推广平台排行榜
  • 住建设部官方网站工作招聘58同城
  • 南昌定制网站公司网站软件下载
  • html网站模板免费seo优化总结
  • 58同城网站建设如何创建微信公众号要钱吗
  • 用户体验的互动展示网站影视广告网站
  • 商城网站开发教程多媒体网站开发实验报告
  • 网站正在建设中英语怎么说中国排名第一的游戏
  • 17年哪个网站做h5最好含山微信搭建网站建设
  • ps在线网站西安市建设工程
  • 手机做任务网站有哪些内容wordpress加载特效
  • 买网站多少钱南通做网站的
  • 十堰网站制作价格厦门seo关键词优化
  • 网站建设和商城有什么好处赣州网站建设费用
  • 网站上怎么做弹幕效果深圳优化公司高粱seo较
  • 电商网站开发需要掌握哪些知识技能深圳网络公司招聘
  • iis 网站无法访问手机网站 php
  • 做的好看的国内网站欣赏发布网页
  • 代做一个网站多少钱复古网站设计
  • 石家庄网站快速备案wordpress结合cms
  • 怎么创造一个网站做外卖有哪些网站
  • 设计和建设一个网站要多少钱wordpress 门户主题
  • 网站建设怎样布局环保h5微网站
  • 网站一起做网店制作微信小程序步骤
  • 深圳网站建设公司专业正确的网址格式输入
  • 网站做任务佣金石家庄制作网站推广
  • 成都公园城市建设局网站查公司的国家网站有哪些
  • 网站大全2021wordpress解压后怎么安装