Wire Apex — Complex Parameters & Wire to Function

DEX475 - Call Apex Methods

📄 第 310 页 🎬 视频课程

课程章节介绍

同学们,今天我们来聊聊 Lightening Web 组件里,怎么给 Apex 方法传复杂参数,以及怎么灵活处理连线调用的结果。 想象一下,你在 Apex 里定义了一个方法,需要接收一个包装好的对象作为参数,比如一个订单信息,里面包含很多字段。这时候,你会在 Apex 类里创建一个带有 @AuraEnabled 注解的类,这个类就是用来包装这些复杂参数的。 在 JavaScript 端,你需要构建一个和这个 Apex 类结构一模一样的对象,然后通过 @wire 传给对应的 Apex 方法。这里有个非常重要的点:为了保持数据的反应性,你千万不能只修改这个对象的某个属性,而是一定要整个替换它。怎么做呢?用 JavaScript 的 spread 语法,也就是三个点,复制出旧对象的所有属性,然后只修改你需要更新的那一两个字段,这样就生成一个全新的对象。这样 Salesforce 的检测机制才能知道数据变了,去重新获取数据。 接下来,很多同学会直接把 @wire 的结果绑定到一个属性上,这在简单场景下还行。但如果想要更精细地控制,比如在拿到数据后做些转换,或者处理错误,你就可以把 @wire 连到一个函数上。这个函数会自动接收一个对象,里面包含 data 和 error 两个属性。你在这个函数里,检查一下,如果有 data,就按你的需求加工一下,然后赋值给你自己定义的一个本地追踪属性;如果有 error,就赋给另一个追踪属性。这样一来,你的模板就不再直接引用 wire 的输出,而是引用你加工后的本地属性,逻辑更清晰,也好维护。 再进一步,有时候一个业务逻辑需要依赖两次服务端调用,比如先查客户,再根据客户查订单。这时候你可以用链式的 @wire。怎么做呢?很简单,把第一个 @wire 的结果(假设它叫 prop1)也设成响应式的属性,然后在第二个 @wire 的配置里,把参数写成 $prop1。这样,只要 prop1 有数据进来,第二个 @wire 就会自动重新触发,拿到对应的订单数据。如果两个结果都拿到后,你需要组合处理,那就写个公共函数,在函数里判断一下两个数据是不是都可用,再做最终的计算或展示。 好,我们总结一下今天的核心:复杂参数用包装 Apex 类,生成新对象用 spread 语法保证反应性;连到函数可以控制数据转换和错误处理;链式调用利用 $ 前缀的响应式属性,让数据流自动串联起来。这些技巧会让你的组件更健壮、更高效。大家回去可以试试看。下课!

关键词

LWC Lightning Web Components Salesforce