diff --git a/pynecone/app.py b/pynecone/app.py index 70fb2f94a..42539d06e 100644 --- a/pynecone/app.py +++ b/pynecone/app.py @@ -397,6 +397,7 @@ class App(Base): compiler.compile_theme(self.style) # Compile the pages. + self.state.set_handlers() custom_components = set() for route, component in self.pages.items(): component.add_style(self.style) @@ -408,6 +409,7 @@ class App(Base): # Compile the custom components. compiler.compile_components(custom_components) + # To support calling event handlers from other handlers. self.state.convert_handlers_to_fns() diff --git a/pynecone/state.py b/pynecone/state.py index d8a5f1db3..19d152672 100644 --- a/pynecone/state.py +++ b/pynecone/state.py @@ -185,7 +185,8 @@ class State(Base, ABC): for name, fn in events.items(): event_handler = EventHandler(fn=fn) cls.event_handlers[name] = event_handler - setattr(cls, name, event_handler) + + cls.set_handlers() @classmethod def convert_handlers_to_fns(cls): @@ -196,6 +197,12 @@ class State(Base, ABC): for name, event_handler in cls.event_handlers.items(): setattr(cls, name, event_handler.fn) + @classmethod + def set_handlers(cls): + """Set the state class handlers.""" + for name, event_handler in cls.event_handlers.items(): + setattr(cls, name, event_handler) + @classmethod @functools.lru_cache() def get_parent_state(cls) -> Optional[Type[State]]: