Преглед изворни кода

Fix event closure invoked recursively (#3405)

Evan Almloff пре 6 месеци
родитељ
комит
ecf8d16f3e
1 измењених фајлова са 4 додато и 1 уклоњено
  1. 4 1
      packages/web/src/dom.rs

+ 4 - 1
packages/web/src/dom.rs

@@ -80,7 +80,10 @@ impl WebsysDom {
 
         let interpreter = Interpreter::default();
 
-        let handler: Closure<dyn FnMut(&Event)> = Closure::wrap(Box::new({
+        // The closure type we pass to the dom may be invoked recursively if one event triggers another. For example,
+        // one event could focus another element which triggers the focus event of the new element like inhttps://github.com/DioxusLabs/dioxus/issues/2882.
+        // The Closure<dyn Fn(_)> type can invoked recursively, but Closure<dyn FnMut()> cannot
+        let handler: Closure<dyn Fn(&Event)> = Closure::wrap(Box::new({
             let runtime = runtime.clone();
             move |web_sys_event: &web_sys::Event| {
                 let name = web_sys_event.type_();