同学们,我们来看一个非常重要的 Lightning Web Components 最佳实践。Salesforce 官方明确建议:在声明公共的 `@api` 属性时,尽量使用原始数据类型,比如字符串、数字、布尔值,而不是直接传递对象或者数组。
为什么要这样呢?咱们一条一条说。
第一点,用单个的原始类型属性,数据形状一目了然。什么意思呢?比如你在组件上定义一个 `@api title`、一个 `@api count`,别人一看就知道这个组件需要一个标题和一个数量,它们是自我说明的,不用额外解释。这就好像交给你一个盒子,上面贴着标签写着“杯子”,你马上就知道里面是什么。
但是,如果你直接传一个对象进去,比如传一个叫 `config` 的东西,里面藏着很多信息,那消费者就得去看外部文档,才能弄明白这个对象里面到底该放哪些字段。一旦你某天修改了对象的内部形状,比如重命名了一个字段,所有用你这个组件的地方就可能悄悄崩溃,而且最糟糕的是,编译阶段根本不会给任何警告。这种隐性的 bug,排查起来非常头疼。
第三点,也是特别容易被忽视的:标准 HTML 元素只认原始值的属性。你看普通的 `
![]()
` 标签,`src` 是一个字符串,`width` 是一个数字。你从来没见过哪个原生 HTML 元素通过属性接收一个大对象。那种通过 `@api` 传对象的模式,其实是 Lightning Web Components 特有的,它并不符合 Web 标准。
那 Web 标准在需要复杂结构的时候怎么办呢?它用子元素。想想表格:`
` 自己不接受一个巨大的数组,而是靠 `` 和 `| ` 这样的子元素来构建行和列。再比如 ` |