Select & Identify a Dynamic Component

DEX475 - JavaScript

📄 第 163 页 🎬 视频课程

课程章节介绍

好,咱们今天来聊聊动态组件的选择和它的生命周期。 你可能会觉得,动态组件嘛,用起来很方便,但要选中它、操作它,就得留个心眼了。关键是,这个组件在被真正挂载到DOM之前,你是没法通过常规方式去选中它的。就像你想叫一个人,但他还没进房间,你喊他没用。 那怎么知道组件准备好了呢?有两种常用方法。第一种,在动态组件自己的代码里,用`connectedCallback`这个生命周期钩子,它会在组件挂载到DOM的那一刻触发。也就是说,在这里面去操作自己,是绝对安全的。 第二种,在父组件里,你可以用`renderedCallback`,然后去检查`this.refs.myCmp`。但注意啊,`this.refs`这个东西并不是在构造函数执行完后立马就有值的,得等到父组件渲染完,也就是调用完`renderedCallback`的时候,它才可用。所以你写的时候要加个防护判断,确保引用存在了再去用。 另外,说到测试,比如用Jest写单元测试的时候,有个容易踩的坑:动态组件的标签名通常是内部生成的,你如果直接依赖那个标签名去查询元素,测试可能随时会坏掉。更好的做法是什么呢?你给动态组件加上一个自定义数据属性,比如`data-id="dynamic-cmp"`,然后在测试里用属性选择器去找到它。这样你的测试就稳多了。 简单总结一下:动态组件得等它挂载好才能选到,用`connectedCallback`或`renderedCallback`加防护来判断;测试时别靠内部标签名,用自定义数据属性来定位。这样你的代码既可靠又好维护。

关键词

LWC Lightning Web Components Salesforce