Reactive $ Prefix — Dynamic Configuration

DEX475 - Use the Wire Service to Get Data

📄 第 293 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊Lightning Web Components里一个非常酷的东西,就是那个带美元符号的`$`前缀,它能让你的组件真正“活”起来。 想象一下,你在配一个线适配器,比如获取某个记录的详情。如果你直接写一个普通的属性值传进去,这个值算一次就完事了,后面就算属性变了,组件也不会重新获取数据。但是,一旦你在配置对象的属性前面加上`$`,比如`$recordId`,你就告诉了Salesforce的通讯服务:“嘿,帮我盯着这个值,只要它一变,马上用新数据重新给我跑一遍这个适配器。” 具体来说,比如你用了`@wire`从服务端拉数据,配置里写了`{ recordId: '$recordId' }`,那么`recordId`这个属性无论是私有属性、还是通过getter/setter模式,甚至是带有`@api`装饰器的公共属性,只要它的值发生变化,框架就会自动检测到,然后重新调用适配器,获取新数据,最后触发组件重新渲染。整个过程是全自动的,不用你手动去调刷新。 不过这里有个小陷阱要记住:`$`前缀只对配置对象的最顶层属性起作用。你要是把它嵌套在数组里,比如写成`['$accountId']`,那它就变成了一个普通的字符串“$accountId”,完全失去了反应性。所以,一定要用在正确的位置。 当你用`@wire`装饰一个属性时,组件刚创建完,还没拿到数据的时候,这个属性的默认值是`{ data: undefined, error: undefined }`。也就是说,`data`和`error`都是`undefined`。所以你在模板里直接访问`wireProperty.data.field`就有可能报错。这时,你必须在模板里用`lwc:if`来检查,比如`lwc:if={wireProperty.data}`,只有数据真的来了,才去渲染依赖它数据的那部分界面,这样就能避免访问`undefined`上的属性。 另外,线适配器的输出还可以串联起来,形成一条“响应式数据管道”。举个例子,你第一个线适配器拿到了某条记录的数据,存在`record`对象的`data`里面,你可以直接用`$record.data.fieldName`作为第二个线适配器的输入参数。这样,一旦第一个适配器返回的数据发生变化,第二个适配器也会自动重新获取数据,整个数据链全都联动起来,非常强大。 总结一下,`$`前缀就像是给你的数据接入了一条“自动感应神经”,让组件能实时响应数据变化。记住它的规则:只用在配置对象顶层,和任何反应式属性搭配使用,模板里别忘了用`lwc:if`保护,再试试点串起多个适配器,你会发现构建动态、实时的Salesforce界面变得特别简单。 好了,这一小节就到这里,下次我们接着深入实践。

关键词

LWC Lightning Web Components Salesforce