首页 > 其他分享 >鸿蒙装饰器之样式与结构重用@Style@Bulid@Extend

鸿蒙装饰器之样式与结构重用@Style@Bulid@Extend

时间:2024-11-02 12:48:50浏览次数:3  
标签:Styles function Style Bulid Extend Text Builder 组件

@Extend

通过 Extend 可以扩展组件的样式、事件,实现复用效果

@Extend仅支持在全局定义,不支持在组件内部定义。

语法:@Extend(组件名) 
function functionName(参数1....) {
  .属性()
  .事件(()=>{})
}


// 使用
组件(){}
  .functionName(参数1...)

@Extend (Text)
function myExtend(){
  .width(100)
  .height(100)
  .backgroundColor(Color.Pink)
  .margin({bottom:50})
  .onClick(()=>{
    AlertDialog.show({
      message:'hello'
    })
  })
}
@Entry
@Component
struct Index {
  build() {
    Column() {
      Text()
        .myExtend()
      Text()
        .myExtend()
    }
  }
}

@Style

@Styles装饰器可以将多条样式设置提炼成一个方法,直接在组件声明的位置调用。通过@Styles装饰器可以快速定义并复用自定义样式。

不同于@Extend 用来给某个组件扩展,@Styles 可以抽取 通用的事件和属性。

语法:

// 全局定义
@Styles function functionName() {
  .通用属性()
  .通用事件(()=>{})
}


@Component
struct FancyUse {
  // 在组件内定义
  @Styles fancy() {
      .通用属性()
      .通用事件(()=>{})
  }
}


// 使用
组件().fancy()
组件().functionName()

// 全局定义
@Styles function setSize() {
  .width(100)
  .height(100)
  .onClick(()=>{
    // 逻辑略
  })
}
@Entry
@Component
struct Index {
  // 在组件内定义
  @Styles setBg() {
    .backgroundColor(Color.Red)
  }
  build() {
    Column() {
      Text()
        .setSize()
        .setBg()
    }
  }
}

@Build

ArkUI提供了一种轻量的UI元素复用机制@Builder,该自定义组件内部UI结构固定,仅与使用方进行数据传递,开发者可以将重复使用的UI元素抽象成一个方法,在build方法里调用。

 如果连结构也需要抽取,就可以使用@Builder,他也可以叫做自定义构建函数

语法:

// 自定义 全局 构建函数
@Builder function MyGlobalBuilderFunction(param1,param2...) {
  // 结构、属性、事件放这里
}
// 使用
MyGlobalBuilderFunction(param1,param2...)

// 自定义 组件内 构建函数
@Builder MyBuilderFunction( param1,param2...) {
  // 结构、属性、事件放这里
}
// 使用
this.MyBuilderFunction(param1,param2...)

//定义全局 Builder
@Builder
function GlobalTextItem(title: string) {
  Text(title)
    .fontSize(30)
    .onClick(() => {
      // 逻辑略
    })
}
@Entry
@Component
struct Index {
  @State message: string = '@Builder';
  build() {
    Column() {
      // 使用全局 Builder
      GlobalTextItem('你好')
      // 使用本地 Builder
      this.LocalTextItem('西兰花炒蛋')
    }
    .width('100%')
    .height('100%')
  }
  //定义本地 Builder
  @Builder
  LocalTextItem(title: string) {
    Text(title)
      .fontSize(30)
      .onClick(() => {
        // 逻辑略
      })
  }
}

总结:

extend与build可以进行传参,而style则不能进行传参

extend抽取 特定组件 样式、事件

style抽取 公共样式、事件

build抽取 结构、样式、事件

标签:Styles,function,Style,Bulid,Extend,Text,Builder,组件
From: https://blog.csdn.net/Kousii/article/details/143447828

相关文章

  • SketchUp Pro 套件中的 Style Builder 有什么作用
    SketchUpPro套件中的StyleBuilder提供用户个性化样式创建工具,能自定义线条样式以制造独特的呈现效果,增强图示个性,支持载入手绘线条,赋予设计作品更有温度的觉感。StyleBuilder是SketchUpPro的一部分,允许用户轻松设计和创建自己的笔触样式,让模型呈现出手绘效果。使用这一工具,你......
  • Nuxt.js 应用中的 components:extend 事件钩子详解
    title:Nuxt.js应用中的components:extend事件钩子详解date:2024/11/1updated:2024/11/1author:cmdragonexcerpt:components:extend是Nuxt.js中的一个生命周期钩子,允许开发者扩展新的组件到项目中。通过这个钩子,开发者可以动态地添加额外的组件,从而增强项目的功能......
  • 推荐一个在react项目中为元素添加样式的第三方库(styled-components)(css in js方案)
    1、安装插件pnpm      pnpmistyled-components npm      npminstall styled-componentsyarn        yarn add styled-components2、创建一个js文件用于写样式(模板字符串写法)(1)以App.jsx组件为例,创建一个style.js样式文件,创建组件并暴露//......
  • Vue.extend 简单用法
    Vue.extend是Vue.js中用于创建一个“子类”的方法。它可以用来定义一个新的Vue组件,允许你在组件中扩展基础Vue实例的功能。使用Vue.extend,你可以定义一个组件的选项,例如data、methods、computed等。创建的组件可以在Vue实例或其他组件中使用。以下是一个简单的示例:......
  • Nuxt.js 应用中的 imports:extend 事件钩子详解
    title:Nuxt.js应用中的imports:extend事件钩子详解date:2024/10/28updated:2024/10/28author:cmdragonexcerpt:imports:extend是Nuxt.js中的一个生命周期钩子,允许开发者在模块设置过程中扩展导入。使用此钩子,开发者可以灵活地管理和调整模块的导入配置,从而增......
  • python知识点100篇系列(23)- 使用stylecloud生成词云
    使用stylecloud生成词云stylecloud是wordcloud优化版,相对来说操作更简单;一个很方便的功能是,可以使用FontAwesome提供的免费图标更改词云的形状;FontAwesome提供的免费图标库参考这里安装所需库主要是安装一下分词用到的jieba和生成词云使用的stylecloud安装方式......
  • Nuxt.js 应用中的 imports:extend 事件钩子详解
    title:Nuxt.js应用中的imports:extend事件钩子详解date:2024/10/28updated:2024/10/28author:cmdragonexcerpt:imports:extend是Nuxt.js中的一个生命周期钩子,允许开发者在模块设置过程中扩展导入。使用此钩子,开发者可以灵活地管理和调整模块的导入配置,从而增强模块......
  • Nuxt.js 应用中的 pages:extend 事件钩子详解
    title:Nuxt.js应用中的pages:extend事件钩子详解date:2024/10/25updated:2024/10/25author:cmdragonexcerpt:pages:extend是Nuxt.js中的一个生命周期钩子,在页面路由解析完成后被调用。这个钩子允许开发者添加、修改或删除路由配置,为自定义页面路由的管理提......
  • Nuxt.js 应用中的 pages:extend 事件钩子详解
    title:Nuxt.js应用中的pages:extend事件钩子详解date:2024/10/25updated:2024/10/25author:cmdragonexcerpt:pages:extend是Nuxt.js中的一个生命周期钩子,在页面路由解析完成后被调用。这个钩子允许开发者添加、修改或删除路由配置,为自定义页面路由的管理提供灵活......
  • 使用OpenCV进行视频边缘检测:案例Python版江南style
    1.引言本文将演示如何使用OpenCV库对视频中的每一帧进行边缘检测,并将结果保存为新的视频文件。边缘检测是一种图像处理技术,它可以帮助我们识别出图像中不同区域之间的边界。在计算机视觉领域,这项技术有着广泛的应用,比如物体识别、运动分析等。2.环境准备为了运行本示例......