Skip to main content

Module event_listener

Module event_listener 

Source
Expand description

通用 DOM 事件监听 Hook(add/remove_event_listener 生命周期封装)。 通用 DOM 事件监听 hook:封装 add/remove_event_listener 生命周期。

用 StoredValue::new_local 持有 (Closure, target),Effect 注册,on_cleanup 清理,把 theme/showcase 等处手写的样板收口到一处。非 wasm32 目标下整体编译为空操作 (服务端无 DOM),调用方无需再写占位变量或 #[cfg]。

设计要点:

  • target 通过一个初始化闭包 acquire 提供,在 Effect 首次运行时调用 (此时 DOM 一定可用);这样调用方无需自己再包一层 Effect。
  • event 要求 &'static str,add 与 remove 复用同一字符串字面量。
  • handler 是 FnMut()(无参);若调用方需要 target 信息(如 media.matches()), 应在 acquire 里 clone 一份后 move 进 handler。需要事件对象(如 KeyboardEvent 的 key())时不要用本 hook,直接用 window_event_listener 或元素的 on: 绑定。
  • acquire、handler 不要求 Send + Sync(可直接捕获 web_sys 句柄); 捕获信号时它们是 Copy 句柄,同样无约束。

Functions§

use_event_listener
非 wasm 占位:服务端无 DOM,编译为空操作。