renderedCallback() — Post-Render Logic

DEX475 - Component Accessibility

📄 第 228 页 🎬 视频课程

课程章节介绍

同学们,今天我们来讲一个LWC里非常关键的生命周期钩子,叫 ,renderedCallback,。这个名字你可能觉得有点长,但其实理解起来很简单。 首先,它是 LWC 独有的一个“渲染后回调”。通俗点说就是:每次你的组件在页面上完成渲染,或者因为数据变化而重新渲染之后,这个 rendereCallback 就会自动被触发。注意是“每次”,包括第一次显示,也包括后面任何一次重绘。 那它的执行顺序有什么讲究呢?记住一个规律:,它从孩子流向父母,。也就是说,如果一个父组件里包含了子组件,那么一定是子组件先把自己的渲染做完,执行完自己的 rendereCallback,然后父组件的 rendereCallback 才会执行。孩子完成了,父母才收尾。 在这里,LWC 的引擎还做了一件很聪明的事。它使用了一种,差异算法,来尽量少地改动页面上的真实 DOM。比如你用 `for:each` 渲染一个列表,引擎会根据你给每个元素设置的 `key` 来跟踪它们,只更新真正变化的那几项。还会对插槽(slot)的内容进行智能比较,而不是粗暴地全部重画。这就是为了保证性能。 正因为 rendereCallback 每次渲染都会触发,如果你只想在,第一次渲染,时做某件事,比如初始化一个图表库,或者手动绑定事件,那就得加一道“防护锁”。最常用的模式是定义一个私有变量,比如 `hasRendered`,初始值是 `false`。在 rendereCallback 里先判断它:如果是 `false`,说明是第一次,那就执行一次性操作,然后马上把 `hasRendered` 设为 `true`。这样后面组件重新渲染时,就会跳过那段逻辑。这个就叫 ,hasRendered 防抖模式,,非常重要。 那在这个钩子里,适合放什么代码呢?官方指出,如果你想,手动通过 `addEventListener` 添加事件监听器,,可以放在里面。但一定要记得,,更推荐直接写在 HTML 模板上,,用声明式的 `onclick={handleClick}`。声明式更简洁、更安全,也是首选。 接下来,我要讲一个最最关键的警告,这也是新手最容易掉进去的坑:,绝对不要在 rendereCallback 里面修改任何响应式状态,。什么叫响应式状态?就是你组件里定义的数据字段,比如 `name`、`count`,或者用 `@api` 标记的公共属性,只要这些值的变化会触发模板重新渲染,就统统不能改。你一旦在

关键词

LWC Lightning Web Components Salesforce