文档管理中心
工具DevEco Studio编写与调试应用代码编辑代码检查Code Linter代码检查规则性能规则@performance@performance/avoid-overusing-custom-component-check

@performance/avoid-overusing-custom-component-check

当在应用中使用自定义组件时,可以优先使用@Builder函数代替自定义组件,@Builder函数不会在后端FrameNode节点树上创建一个新的树节点,有助于缩短页面的加载和渲染时长。

规则配置

收起
自动换行
深色代码主题
复制
  1. // code-linter.json5
  2. {
  3. "rules": {
  4. "@performance/avoid-overusing-custom-component-check": "warn",
  5. }
  6. }

选项

该规则无需配置选项。

正例

收起
自动换行
深色代码主题
复制
  1. // 1. 自定义@Builder函数组件
  2. @Builder
  3. function UserCardBuilder(name: string, age?: number, avatarImage?: ResourceStr) {
  4. Row() {
  5. Row() {
  6. Image(avatarImage)
  7. .size({ width: 50, height: 50 })
  8. .borderRadius(25)
  9. .margin(8)
  10. Text(name)
  11. .fontSize(30)
  12. }
  13. Text(`年龄:${age?.toString()}`)
  14. .fontSize(20)
  15. }
  16. .backgroundColor(DEFAULT_BACKGROUND_COLOR)
  17. .justifyContent(FlexAlign.SpaceBetween)
  18. .borderRadius(8)
  19. .padding(8)
  20. .height(66)
  21. .width('80%')
  22. }
  23. @Component
  24. export struct UserCardList {
  25. @State users: User[] = getUsers();
  26. aboutToAppear(): void {
  27. let message = 'hello world';
  28. }
  29. build() {
  30. List({ space: 8 }) {
  31. ForEach(this.users, (item: User) => {
  32. ListItem() {
  33. // 2. 使用@Builder函数
  34. UserCardBuilder(item.name, item.age, item.avatarImage)
  35. }
  36. }, (item: User) => item.id)
  37. }
  38. .alignListItem(ListItemAlign.Center)
  39. }
  40. }

反例

收起
自动换行
深色代码主题
复制
  1. import { util } from '@kit.ArkTS';
  2. interface User {
  3. id: string;
  4. name: string;
  5. age?: number;
  6. avatarImage?: ResourceStr;
  7. // introduction: string;
  8. // ...
  9. }
  10. // 构造数据
  11. const DEFAULT_BACKGROUND_COLOR = Color.Pink;
  12. const getUsers = () => {
  13. const USERS: User[] = [{
  14. id: '1',
  15. name: '张三',
  16. }, {
  17. id: '2',
  18. name: '李四',
  19. }, {
  20. id: '3',
  21. name: '王五',
  22. }];
  23. return Array.from(Array(30), (item: User, i: number) => {
  24. return {
  25. id: util.generateRandomUUID(),
  26. name: USERS[i%3].name,
  27. avatarImage: $r('app.media.avatar'),
  28. age: 18 + i
  29. } as User;
  30. });
  31. }
  32. // 用户卡片列表组件
  33. @Component
  34. export struct UserCardList {
  35. @State users: User[] = getUsers();
  36. build() {
  37. List({ space: 8 }) {
  38. ForEach(this.users, (item: User) => {
  39. ListItem() {
  40. UserCard({ name: item.name, age: item.age, avatarImage: item.avatarImage })
  41. }
  42. }, (item: User) => item.id)
  43. }
  44. .alignListItem(ListItemAlign.Center)
  45. }
  46. }
  47. // 用户卡片自定义组件
  48. @Component
  49. struct UserCard {
  50. @Prop avatarImage: ResourceStr;
  51. @Prop name: string;
  52. @Prop age: number;
  53. build() {
  54. Row() {
  55. Row() {
  56. Image(this.avatarImage)
  57. .size({ width: 50, height: 50 })
  58. .borderRadius(25)
  59. .margin(8)
  60. Text(this.name)
  61. .fontSize(30)
  62. }
  63. Text(`年龄:${this.age.toString()}`)
  64. .fontSize(20)
  65. }
  66. .backgroundColor(DEFAULT_BACKGROUND_COLOR)
  67. .justifyContent(FlexAlign.SpaceBetween)
  68. .borderRadius(8)
  69. .padding(8)
  70. .height(66)
  71. .width('80%')
  72. }
  73. }

规则集

收起
自动换行
深色代码主题
复制
  1. plugin:@performance/recommended
  2. plugin:@performance/all

Code Linter代码检查规则的配置指导请参考Code Linter代码检查

在 工具 DevEco Studio 中进行搜索
请输入您想要搜索的关键词