Decorate a Property vs Decorate a Function

DEX475 - Use the Wire Service to Get Data

📄 第 294 页 🎬 视频课程

课程章节介绍

我们来聊聊在 Lightning Web Components 中,用 `@wire` 装饰器拿 Salesforce 记录数据的时候,到底是用“属性装饰”还是“函数装饰”?这其实是个很常见的纠结,但选哪个,完全取决于你要拿数据来做什么。 先说说最简单的“属性装饰”。它直接把拿到的结果赋给一个类属性,比如 `data` 和 `error`。这样你就能很方便地通过 `record.data` 或者 `record.error` 来访问。如果你想直接展示某个字段,比如账户名称,你可以用 `getFieldValue` 这个助手函数,或者直接按 JSON 结构去取。这种方式特别直接、干净,最适合“拿到数据就显示”的场景,不用写额外的处理逻辑。 但有时候,你希望在数据一到手的时候,马上做点额外的动作——比如把数据重新格式化一下,或者更新页面上的其他内容,又或者需要做一些错误处理、甚至触发一些副作用。这时候,“函数装饰”就派上用场了。它给你一个回调函数,这个回调函数会接收到一个对象,里面包好了 `data` 和 `error`。注意在解构的时候,顺序不重要,你写 `{data, error}` 就行,它不会管你先写哪个。然后在这个回调里面,你就能尽情地处理数据、转换格式、处理报错,或者把值保存到你自己的响应式属性里。更重要的是,这个回调不一定非要在组件连上或者渲染之后才触发,它可能在之前或之后运行,所以你最好在模板里加个 `lwc:if` 的判断,防止数据还没回来就去渲染,导致 undefined 报错。 另外还有一个很实用的小帮手,就是 `lightning/uiRecordApi` 模块里的 `getFieldValue()` 函数。它专门帮你从返回的记录结构里把字段值轻松抽出来,不用你自己一层层去钻对象,省时省力,代码也干净。 总结一下:如果你的目标只是拿到数据直接显示,用属性装饰,简单又明了;如果你需要在数据到时做点儿加工,那就用函数装饰,灵活又强大。记住这两个场景,选起来就很容易。

关键词

LWC Lightning Web Components Salesforce