Example: Upload a Web Component as a Static Resource

DEX475 - Third-Party Web Components (Beta)

📄 第 233 页 🎬 视频课程

课程章节介绍

今天我们来聊聊一个很有趣的例子——如何在Lightning Web Components里集成第三方的JavaScript库,来实现一个自动更新的时间显示组件。我们把这个例子叫做“时间元素”演示。 首先,我们有一个现成的JavaScript库,它提供了一些和时间相关的Web组件,比如显示相对时间、绝对时间等等。这个库本身是用普通JavaScript写的,不是Salesforce原生的。那我们怎么把它用在自己的LWC组件里呢?这就是静态资源集成的方法。 第一步,我们拿到这个库的JavaScript文件,把它上传到Salesforce的静态资源里,给它起个名字,比如“timeElements”。这样,Salesforce就会给它分配一个URL,我们在代码里可以通过`@salesforce/resourceUrl/timeElements`这个导入来获取这个URL。 接下来,在我们的LWC组件中,我们不能直接在模板里用这个库提供的自定义元素,得先把脚本加载进来。加载的时机很重要,我们在`renderedCallback`生命周期钩子里做这件事。`renderedCallback`会在组件渲染到DOM之后执行,确保有地方可以容纳这些自定义元素。 在加载脚本时,我们使用平台提供的`loadScript`方法,它是从`lightning/platformResourceLoader`里导入的。我们把之前获得的静态资源URL传进去。为了防止脚本被重复加载,我们通常设置一个标志位,比如一个私有属性`_scriptsLoaded`,如果已经加载过了就跳过,防止每次重新渲染都加载一遍。 这里我们用到了现代的`async/await`语法,并且用`try...catch`来包裹,这样如果加载失败,我们可以优雅地处理错误,比如在控制台输出或者显示一个错误消息。这就是清晰的错误处理模式。 当脚本成功加载后,这个库会在全局范围内注册它自己的自定义元素——这些元素名是库定义好的,比如``、``之类。因为它们是通过外部脚本注册的,所以在我们的模板里直接使用这些标签时,需要用`lwc:external`这个指令来告诉LWC:“嘿,这个元素不是我定义的,是外部来的,不要把它编译掉。”这样,模板编译器就会原样保留这些标签。 一旦这些自定义元素被注册,它们就可以立即在模板里使用了。最棒的是,这个时间元素库本身已经实现了每分钟自动刷新显示的时间,我们完全不需要写额外的定时器或更新逻辑。组件会自动保持时间显示是最新的,比如显示“3分钟前”,它会随着时间推移变成“4分钟前”,完全自动。 总结一下整个过程:上传JS文件作为静态资源→导入URL→在`renderedCallback`里用`loadScript`加载并做防重处理→用`async/await`加`try/catch`确保健壮性→在模板里使用带`lwc:external`的自定义标签→享受自动更新的时间显示。 这看起来复杂,但一旦你掌握了这个模式,就可以把任何类似的Web组件库集成到LWC里,大大扩展你组件的功能。大家可以在动手实践中慢慢熟悉,其实并不难。

关键词

LWC Lightning Web Components Salesforce