Import & Expose Apex Methods

DEX475 - Call Apex Methods

📄 第 308 页 🎬 视频课程

课程章节介绍

嗨,同学们,今天我们来聊聊在Lightning Web Components里,怎么调用Apex方法。这个话题其实挺实用的,因为咱们的组件经常需要跟后端打交道嘛。 首先呢,在JavaScript文件里,我们要通过一个特殊的导入来拿到Apex方法。这个导入用的是`@salesforce/apex`范围模块,格式是“命名空间.类名.方法名”。注意啦,这里的命名空间其实就是你组织在Salesforce里的唯一标识,比如默认的“c”或者其他自定义的。 有个容易踩的坑提醒大家:当你把Apex类名搬过来时,Salesforce的开发工具会自动帮你把类名级联改成JavaScript导入的样子,但是方法和参数的名字可不会自动变!也就是说,如果你在Apex那边改了方法名或者参数,你必须在JS代码里手动更新,不然就不匹配了,调试的时候会很头疼。 那什么样的Apex方法才能被LWC调用呢?它必须是静态的(static),访问修饰符是public或global,并且一定要带有@AuraEnabled注解。记住这三点,缺一不可。 说到具体的调用方式,我们有两种常用手段:一个是用`@wire`装饰器,另一个是命令式调用(就是直接调用函数)。如果用`@wire`,你一定得在方法定义里加上`cacheable=true`,这个很重要,因为缓存能提升性能。而且为了方便将来切换,官方也建议你在命令式调用时也加上这个属性,养成好习惯。 接下来看看允许传什么类型的数据。支持的类型挺丰富的:基础的原始类型(比如字符串、数字)、sObjects(标准或自定义对象)、Apex类的实例,还有集合(像List、Map这些)。但是要注意,不支持Apex的内部类,也不支持那个`@supressible`注解,用的时候要避开。 还有一个千万不能忽略的限制:每个调用都有自己的调用上限上下文。简单说,无论是通过`@wire`还是命令式调用,每次Apex调用都会单独消耗组织的限额。而且Salesforce框架会对一个请求里所有的Apex操作做批量处理,最多允许2500个操作。如果超过这个数,就会直接返回413错误,所以批量处理的时候得心里有数,别一次性塞太多。 最后提一下,在Salesforce DX项目里,这些Apex类放在哪儿呢?它们都在`classes`目录下,这是约定的结构。 好了,这一页的重点就是这些。弄懂这些规则,你就能顺畅地在LWC里调用Apex方法啦。下节课我们继续深入。

关键词

LWC Lightning Web Components Salesforce