Example: Counter with Attribute Change Callback

DEX475 - Third-Party Web Components (Beta)

📄 第 240 页 🎬 视频课程

课程章节介绍

同学们,今天我们来学一个更高级的计数器写法,叫作,属性观察模式,。别害怕,其实很简单。 还记得我们之前做的计数器吗?这次我们让它变得更灵活:不管是在组件内部改,还是从外部改计数,页面都能自动更新。 首先,我们把,计数,做成一个 `getter/setter` 对。 - 当你在代码里读 `this.count` 时,它实际上读取的是 HTML 属性上的值。 - 当你写 `this.count = 5` 时,它不仅更新了变量,还会把组件对应的 HTML 属性 `count` 也给更新一下。 这样,,属性, 和 HTML 上的 ,特性, 就永远保持同步了。 然后,我们通过 `observedAttributes` 这个静态属性,告诉浏览器:“嘿,帮我看好 `count` 这个属性,一旦它变了,叫我来处理。” 注意,Slide 上可能有个笔误,写成了 “DelivervedLedger”,实际就是 `observedAttributes`。 一旦计数属性变化,浏览器就会自动调用 `attributeChangedCallback` 回调函数。在这里面,我们要做两件事: 1. 重新渲染按钮的 HTML,好让界面上显示的数字更新。 2. 重新绑定事件监听器,这样按钮才能正常工作。 因为渲染按钮这段代码在 `connectedCallback`(组件连上 DOM 时)也要用,我们把它抽成一个 `renderButton` 方法,避免重复。这样代码干净又好维护。 最后,增量处理函数(比如每点一次加一那个方法)里,我用 `.bind(this)` 来保持函数的上下文。有些同学习惯用箭头函数,这里 `.bind(this)` 也是同样效果,就是让方法里的 `this` 一直指向组件实例,不会跑丢。 什么时候用这种模式呢? 就是当你的组件状态需要,从外面,来设置的时候,比如别人通过 `setProperty` 或者直接赋值来改 `count`,而你的 UI 又必须立即跟着变。这个模式就是专门解决这种场景的。 简单总结: - 用 `getter/setter` 同步属性和特性 - 用 `observedAttributes` 盯住变化 - 在 `attributeChangedCallback` 里刷新界面 - 把重复渲染逻辑抽成方法 - 用 `.bind(this)` 保住上下文 这样,你的组件就健壮又好用了。下节课我们配上例子看一眼代码,就更清楚啦。

关键词

LWC Lightning Web Components Salesforce