好,同学们,我们来看一下声明式事件处理。
在 Lightning Web Components 中,处理事件的首选方式就是声明式的。为什么?因为它更干净、代码更少。你不用再手动调用 `addEventListener` 了,直接在模板里用 HTML 属性来绑定事件就行。
具体怎么做呢?很简单,属性名以 `on` 开头,后面跟着事件类型。比如,要监听点击事件,就写 `onclick={handleClick}`。这样一来,LWC 就会自动帮你把事件处理函数绑定到元素上。
那如果我们想要更灵活一点呢?比如需要绑定多个事件监听器,或者事件类型是动态确定的。这时候就不能用固定的 `onclick` 这种形式了。LWC 提供了一个特殊的指令 `lwc:on`,它能接受一个对象。这个对象的键是事件类型字符串,值就是对应的处理函数。
举个例子,你可以这样写:`
`。然后在 JS 里,`eventHandlers` 是一个对象,比如 `{ click: handleClick, mouseover: handleMouseOver }`。LWC 会自动把这个对象里的每个事件都绑定好。
而且,和原生 `addEventListener` 不一样的是,`lwc:on` 自动把处理函数绑定到了组件实例上。也就是说,你在处理函数里面用 `this`,它指向的就是你的组件,不会跑丢,非常方便。
好,重点来了,动态监听器怎么更新?你可以随时给 `eventHandlers` 重新赋一个新对象,来添加、删除或者修改事件监听器。但是要注意,你不能直接修改现有对象的属性,比如 `this.eventHandlers.click = newHandler`,这样会报错。你必须给它一个全新的对象引用。
那规则是怎样的呢?很简单:
- 从新对象里少了某个属性,对应的监听器就被删除。
- 添加了新的属性,就新增一个监听器。
- 保留的属性如果值变了,就会更新监听器。
最后,在组件的生命周期里,比如 `linkedCallback` 或者按钮点击时,子组件会派发事件,这时候你的声明式监听器就会按预期触发。
记住这些,事件处理就能写得又简洁又好维护。