ArkUI极简教程11:@Prop单向数据传递的使用

在本章中,你将学会如何使用@Prop装饰器的基础使用,及其实际开发中的使用场景。

Search搜索框视图

日常工作中我们可能都会遇到一个场景,即当前页面的参数值要传递到下一个页面中,比如首页->详情页。这时,就可以配合上一章节提及到的@State装饰器来实现这一逻辑。

比如我们我们设计2个页面,在当前页面输入内容,在第二个页面进行显示,我们先构建第一个页面的内容,如下代码所示:

php 复制代码
// 参数
@State searchText: string = ''
controller: SearchController = new SearchController()

// 视图
Column() {
  // 空白填充
  Blank()

  // 搜索框
  Search({ value: this.searchText, placeholder: '请输入内容', controller: this.controller })
    .searchButton('搜索')
    .height(60)
    .margin({ left: 20, right: 20, bottom: 60 })
    .onSubmit((value: string) => {
      this.searchText = value
    })
}
.height('100%')

上述代码中,我们使用@State装饰器表示了一个string类型的状态数据searchText,表明该数据接受更改并更新。为了使用Search组件,我们声明了一个搜索控制器SearchController,即在当前视图上创建一个新的控制器,用于启用输入搜索相关功能。

在视图搭建上,我们使用Column垂直布局容器,设置其高度为100%。在容器中我们使用Search搜索框视图作为主体功能视图,设置其高度为60,于是乎当Search搜索框视图高度固定的情况下,我们使用Blank空白填充视图,就可以将空白区域填充,使得Search搜索框视图位于页面底部位置。

而对于Search搜索框视图本身,我们设置其接收的内容value参数绑定我们声明好的参数searchText,提示文字placeholder为"请输入内容",控制器类型为声明的SearchController,当然你也可以不单独声明,直接写new SearchController()。

外层修饰器方面,我们设置searchButton搜索按钮为"搜索"文字,设置当Search搜索框视图点击"搜索"时(即onSubmit),接受新的值并赋予给searchText。

简单来说,也就是在搜索框输入内容后,点击"搜索"按钮,输入的内容并更新到了searchText。

@Prop装饰器-单向数据传递

完成后下一步,我们创建一个新的视图,如下代码所示:

scss 复制代码
// 使用视图
DetailView({value:this.searchText})

// 声明第二个视图
@Component
struct DetailView {
  @Prop value: string

  build() {
    Column({space:20}) {
      Text(this.value)
        .fontSize(17)
        .fontColor('#181818')
      Text('你搜索的内容是:')
        .fontSize(14)
        .fontColor('#999999')
    }
  }
}

上述代码中,我们单独创建了一个新的自定义视图DetailView,并且使用@Prop装饰器表示了一个string类型的参数value。

在这里和@State装饰器不同的是,我们不需要给value参数复制,这是由于@Prop装饰器表示的参数是一种单向传递的参数,也就是该参数只从外部接收参数值。

完成DetailView视图后,我们在PropView页面中调用DetailView视图,作为其页面元素的一部份,并且对于DetailView视图使用@Prop装饰器表示的value参数,我们传入值为PropView页面页面中的参数searchText。

如此,当PropView页面中的searchText参数的值发生变化时,在点击按钮时,searchText参数的值会传递给DetailView视图中的value参数,实现参数的单向传递。如下图所示:

小知识·Struct和GlobalBuilder

在前面的章节中,我们学习过GlobalBuilder全局的自定义视图,而本章中我们使用了Component+Struct来创建自定义视图,那么两者有什么区别呢?

在实际使用上,GlobalBuilder是全局UI组件,常用于定义可复用的组件和UI元素,减少重复的代码量和提高代码的可维护性。但常常不包含状态管理和复杂的逻辑,作为轻量级的复用组件使用。

而使用Component+Struct来创建自定义视图更多的是创建"组件",包含状态管理、生命周期方法和复杂逻辑,适用于构建完整的UI模块或页面,常常我们会将组件的参数使用@Prop装饰器表示,用于接收外部视图的数据。

因此,在实际开发过程中,使用Builder、GlobalBuilder,还是自定义Struct,可以根据当前业务场景的复杂度和代码块复用程度而定,在之后的章节中我们也会有所提及。

快来动手试试吧~

相关推荐
小冷爱学习!4 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
2501_904447745 小时前
华为发力中端,上半年nova14下半年nova15,大力普及原生鸿蒙
华为·智能手机·django·scikit-learn·pygame
MarkHD6 小时前
第十八天 WebView深度优化指南
华为·harmonyos
塞尔维亚大汉6 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI CSI】
harmonyos·领域驱动设计
别说我什么都不会7 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
feiniao86518 小时前
2025年华为手机解锁BL的方法
华为·智能手机
塞尔维亚大汉8 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【I3C】
harmonyos·领域驱动设计
VVVVWeiYee8 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信
今阳10 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
余多多_zZ11 小时前
鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )
学习·华为·harmonyos·鸿蒙·鸿蒙系统