Browse Source

Allow StatefulComponent to also be rendered via __str__ (#3211)

This makes it easier to implement React "render functions" when wrapping
components that require children to be a callable.
Masen Furer 1 năm trước cách đây
mục cha
commit
aeca983290

+ 1 - 1
reflex/compiler/compiler.py

@@ -174,7 +174,7 @@ def _compile_root_stylesheet(stylesheets: list[str]) -> str:
     return templates.STYLE.render(stylesheets=sheets)
     return templates.STYLE.render(stylesheets=sheets)
 
 
 
 
-def _compile_component(component: Component) -> str:
+def _compile_component(component: Component | StatefulComponent) -> str:
     """Compile a single component.
     """Compile a single component.
 
 
     Args:
     Args:

+ 10 - 0
reflex/components/component.py

@@ -2103,6 +2103,16 @@ class StatefulComponent(BaseComponent):
         """
         """
         return dict(Tag(name=self.tag))
         return dict(Tag(name=self.tag))
 
 
+    def __str__(self) -> str:
+        """Represent the component in React.
+
+        Returns:
+            The code to render the component.
+        """
+        from reflex.compiler.compiler import _compile_component
+
+        return _compile_component(self)
+
     @classmethod
     @classmethod
     def compile_from(cls, component: BaseComponent) -> BaseComponent:
     def compile_from(cls, component: BaseComponent) -> BaseComponent:
         """Walk through the component tree and memoize all stateful components.
         """Walk through the component tree and memoize all stateful components.