首页 > 其他分享 >鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?

鸿蒙 NEXT 如何使用 @Styles 装饰器来优化我的组件代码?

时间:2024-10-17 10:33:58浏览次数:7  
标签:Styles 定义 样式 代码 NEXT 组件 全局 器来

大家好,我是 V 哥。在鸿蒙 NEXT 开发中,@Styles 装饰器是一种非常有用的方法,用于定义可重用的样式。这使得开发者可以将多条样式设置提炼成一个方法,以便在多个组件中复用,从而提高代码的可维护性和可读性。以下是 @Styles 装饰器的详细用法和应用场景案例。

@Styles 装饰器的使用说明

  1. 仅支持通用属性和事件:当前 @Styles 仅适用于通用属性和事件,不支持特定于某个组件的属性或事件。
  2. 不支持参数@Styles 方法不能带有参数。例如,以下是一个错误的使用示例:
   @Styles function globalStyles(value: number) {
     .width(value)
   }

正确的做法是不带参数:

   @Styles function globalStyles() {
     .width(150)
     .height(100)
     .backgroundColor(Color.Pink)
   }
  1. 定义位置@Styles 可以定义在组件内或全局。在全局定义时,需要在方法名前添加 function 关键字;在组件内定义时,则不需要。
   // 全局定义
   @Styles function globalStyles() {
     .width(150)
     .height(100)
     .backgroundColor(Color.Pink)
   }

   // 组件内定义
   @Component
   struct FancyComponent {
     @Styles myStyle() {
       .width(200)
       .height(100)
       .backgroundColor(Color.Yellow)
     }
   }
  1. 访问组件内部状态:定义在组件内的 @Styles 可以通过 this 访问组件的常量和状态变量,并可以在 @Styles 里通过事件来改变状态变量的值。
   @Component
   struct MyComponent {
     @State heightValue: number = 100
     @Styles myStyle() {
       .height(this.heightValue)
       .backgroundColor(Color.Yellow)
       .onClick(() => {
         this.heightValue = 200
       })
     }
   }
  1. 优先级:组件内 @Styles 的优先级高于全局 @Styles。框架会优先查找当前组件内的 @Styles,如果找不到,则会全局查找。

来看一个案例

以下是一个使用 @Styles 装饰器的示例,展示了如何在全局和组件内定义样式,并在组件中使用这些样式。

// 定义全局样式
@Styles function globalStyles() {
  .width(150)
  .height(100)
  .backgroundColor(Color.Pink)
}

@Entry
@Component
struct StyleUse {
  @State heightValue: number = 100
  // 定义组件内样式
  @Styles myStyle() {
    .width(200)
    .height(this.heightValue)
    .backgroundColor(Color.Yellow)
    .onClick(() => {
      this.heightValue = 200
    })
  }

  build() {
    Column({ space: 10 }) {
      // 使用全局样式
      Text('FancyA').globalStyles().fontSize(30)
      // 使用组件内样式
      Text('FancyB').myStyle().fontSize(30)
    }
  }
}

在这个案例中,我们定义了一个全局样式 globalStyles 和一个组件内样式 myStyle。在 StyleUse 组件的 build 方法中,我们使用这些样式来设置两个 Text 组件的样式。这展示了如何通过 @Styles 装饰器复用样式,使得代码更加简洁和易于维护。

如何使用 @Styles 装饰器来优化我的组件代码?

使用 @Styles 装饰器可以显著优化你的组件代码,使其更加简洁、可维护,并减少重复的样式代码。以下是如何使用 @Styles 装饰器来优化组件代码的步骤和示例:

1. 识别重复的样式代码

首先,你需要识别在多个组件中重复使用的样式代码。这些可能是通用的布局样式、颜色、字体大小等。

2. 定义 @Styles 方法

将这些重复的样式代码提炼到一个或多个 @Styles 方法中。你可以在组件内部或全局定义这些方法。

  • 组件内样式:如果样式仅在单个组件中使用,可以在该组件内部定义 @Styles 方法。
  • 全局样式:如果样式在多个组件中使用,可以定义为全局 @Styles 方法。

3. 应用 @Styles 方法

在组件的 build 方法中,通过方法调用的方式应用这些 @Styles 方法到相应的 UI 组件上。

4. 使用状态和事件

如果需要,你可以在 @Styles 方法中使用组件的状态和事件处理器,使样式可以根据组件的状态动态变化。

优化示例

假设你有一个应用,其中多个页面都有需要显示警告信息的 Text 组件,警告信息的样式在所有页面中都是一致的:红色、加粗、字体大小为16。

步骤 1:定义全局 @Styles 方法

// 定义全局警告样式
@Styles function warningStyle() {
  .fontSize(16)
  .fontWeight(FontWeight.Bold)
  .fontColor(Color.Red)
}

步骤 2:在组件中使用 @Styles 方法

@Entry
@Component
struct WarningMessage {
  build() {
    Column() {
      // 使用全局警告样式
      Text('这是一条警告信息').warningStyle()
    }
  }
}

在这个示例中,我们定义了一个全局的警告样式 warningStyle,并在 WarningMessage 组件中应用了这个样式。这样,无论在应用的哪个部分需要显示警告信息,都可以简单地调用 .warningStyle() 方法来应用这个样式,而不需要重复编写样式代码。

总结

通过使用 @Styles 装饰器,你可以将样式逻辑从组件的业务逻辑中分离出来,使得代码更加清晰和易于管理。这不仅减少了代码的重复,也使得样式的修改和维护变得更加集中和高效。轻舟已过万重山,鸿蒙势头不可挡。关注威哥爱编程,一起混进鸿蒙生态。

标签:Styles,定义,样式,代码,NEXT,组件,全局,器来
From: https://www.cnblogs.com/wgjava/p/18470069

相关文章

  • 博客搭建之路:hexo使用next主题新增RSS
    hexo使用next主题新增RSShexo版本5.0.2npm版本6.14.7next版本7.8.0如何让next主题支持RSS呢?看着好像官方没支持,自己加上吧在next下的_config.yml配置中新增sidebar_rss:text:RSSicon:fafa-rsscolor:burlywoodlink:atom.xml找到next/layout/_partials......
  • 本地运行vercel模板项目vercel/nextjs-postgres-auth-starter
    官方指南链接:https://vercel.com/templates/next.js/prisma-postgres-auth-starter创建项目create-next-appnpxcreate-next-appnextjs-typescript-starter--example"https://github.com/vercel/nextjs-postgres-auth-starter"进入nextjs-typescript-startercdnextj......
  • MySQL 通过 Next-Key Locking 技术(行锁+间隙锁)避免幻读问题
    在MySQL中,InnoDB引擎通过Next-KeyLocking技术来解决幻读问题。幻读是一种事务并发问题,通常出现在RepeatableRead隔离级别下的范围查询操作中。幻读的现象是,事务在查询时多次执行相同的范围查询,但由于其他事务的插入或删除操作导致结果不一致,出现“幻觉”一样的记录。Next-KeyL......
  • Next.js 零基础开发入门教程2 构建基础脚手架 2024最新更新中|曲速引擎 Warp Drive
    开发目标我们将构建一个简化版本的财务仪表板,其内容包括:公共主页、登录页面、受身份验证保护的仪表板页面、用户可以添加、编辑和删除发票这篇文章先创建一个简单的nextjs脚手架页面安装pnpm包管理器接上一篇,开发环境都准备好之后,我们来做创建项目的准备,首先先判断上一篇的环......
  • Next.js 实战开发入门 1 开发环境部署 - 曲速引擎 Warp Drive
    开发目标我们将构建一个简化版本的财务仪表板,其内容包括:公共主页、登录页面、受身份验证保护的仪表板页面、用户可以添加、编辑和删除发票开发环境配置开发客户端Windows10(不限系统,兼容vscode即可)开发服务端Ubuntu24.04(不限系统,兼容node即可)开发工具VscodeVersion:......
  • 如何在鸿蒙 NEXT 中使用 @Builder 装饰器优化 UI 组件的复用?
    在开发鸿蒙NEXT应用时,咱们需要经常创建自定义组件,由于自定义组件内部UI结构固定,仅与使用方进行数据传递,因此,ArkUI还提供了一种更轻量的UI元素复用机制@Builder。大家好,我是V哥,在鸿蒙NEXT开发中,@Builder装饰器是一种轻量级的UI元素复用机制,它允许开发者将重复使用......
  • 博客搭建之路:hexo使用next主题博客侧边栏标题点击不跳转
    hexo使用next主题博客侧边栏标题点击不跳转hexo版本5.0.2npm版本6.14.7next版本7.8.0本着我肯定不是第一个出这个问题的人,去github上找了找,果然我不是第一个好吧,也跟着改吧(修改themes/next/source/js/utils.js),找到registerSidebarTOC函数registerSidebarTOC:functio......
  • ABP VNext 系列:框架启动流程以及依赖注入原理和源码分析
    简单介绍ABPVNextGithub地址:https://github.com/abpframework/abp官网文档地址:https://abp.io/docs/latest官网:https://abp.io/ABPVNext框架是一个基于ASP.NETCore的完整基础架构,也就是我们现在称的ABP框架,它遵循软件开发最佳实践和最新技术来创建现代Web应用程......
  • 鸿蒙NEXT开发声明式UI是咋回事?
    大家好,我是V哥,ArkTS是HarmonyOS优选的主力应用开发语言,它在TypeScript的基础上进行了扩展,提供了声明式UI描述、自定义组件和动态扩展UI元素的能力。这些能力与ArkUI开发框架中的系统组件及其相关的事件方法、属性方法等共同构成了UI开发的主体。ArkTS还提供了多维......
  • 【Next.js 项目实战系列】02-创建 Issue
    原文链接CSDN的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话,给我的库点个star,关注一下吧 上一篇【Next.js项目实战系列】01-创建项目创建Issue配置MySQL与Prisma​在数据库中可以找到相关内容,这里不再赘述添加model​本节代码链接#schema.pri......