Просмотр исходного кода

clean up the code to pass tests

Lendemor 5 месяцев назад
Родитель
Сommit
bf347841b1
1 измененных файлов с 34 добавлено и 12 удалено
  1. 34 12
      reflex/components/component.py

+ 34 - 12
reflex/components/component.py

@@ -2196,6 +2196,35 @@ class StatefulComponent(BaseComponent):
             ]
         return [var_name]
 
+    @staticmethod
+    def _get_deps_from_event_trigger(event: EventChain | EventSpec | Var) -> set[str]:
+        """Get the dependencies accessed by event triggers.
+
+        Args:
+            event: The event trigger to extract deps from.
+
+        Returns:
+            The dependencies accessed by the event triggers.
+        """
+        events: list = [event]
+        deps = set()
+        if isinstance(event, EventChain):
+            events.extend(event.events)
+
+        for ev in events:
+            if isinstance(ev, EventSpec):
+                for arg in ev.args:
+                    deps.union(
+                        {
+                            str(dep)
+                            for a in arg
+                            if a._var_data is not None
+                            for dep in a._var_data.deps
+                            if a._var_data.deps is not None
+                        }
+                    )
+        return deps
+
     @classmethod
     def _get_memoized_event_triggers(
         cls,
@@ -2232,18 +2261,11 @@ class StatefulComponent(BaseComponent):
 
             # Calculate Var dependencies accessed by the handler for useCallback dep array.
             var_deps = ["addEvents", "Event"]
-            for ev in event.events:
-                if isinstance(ev, EventSpec):
-                    for arg in ev.args:
-                        var_deps.extend(
-                            {
-                                str(dep)
-                                for a in arg
-                                if a._var_data is not None
-                                for dep in a._var_data.deps
-                                if a._var_data.deps is not None
-                            }
-                        )
+
+            # Get deps from event trigger var data.
+            var_deps.extend(cls._get_deps_from_event_trigger(event))
+
+            # Get deps from hooks.
             for arg in event_args:
                 var_data = arg._get_all_var_data()
                 if var_data is None: