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,编译为空操作。