diff --git a/pynecone/app.py b/pynecone/app.py index c0b3fe369..b4c387b18 100644 --- a/pynecone/app.py +++ b/pynecone/app.py @@ -263,7 +263,6 @@ class App(Base): # Generate the component if it is a callable. try: component = component if isinstance(component, Component) else component() - component.set_state(self.state) except TypeError as e: message = str(e) if "BaseVar" in message or "ComputedVar" in message: diff --git a/pynecone/components/base/bare.py b/pynecone/components/base/bare.py index ce26c78cf..abf5ffe88 100644 --- a/pynecone/components/base/bare.py +++ b/pynecone/components/base/bare.py @@ -27,8 +27,4 @@ class Bare(Component): return cls(contents=str(contents)) # type: ignore def _render(self) -> Tag: - contents = str(self.contents) - if self.state is not None: - check = f"{{{self.state.get_name()}" - contents = str(self.contents).replace(check, f"${check}") - return Tagless(contents=contents) + return Tagless(contents=str(self.contents)) diff --git a/pynecone/components/component.py b/pynecone/components/component.py index 752e1cd87..c153fc0f3 100644 --- a/pynecone/components/component.py +++ b/pynecone/components/component.py @@ -24,9 +24,6 @@ from pynecone.style import Style from pynecone.utils import format, imports, path_ops, types from pynecone.var import BaseVar, Var -if typing.TYPE_CHECKING: - from pynecone.state import State - class Component(Base, ABC): """The base class for all Pynecone components.""" @@ -37,9 +34,6 @@ class Component(Base, ABC): # The style of the component. style: Style = Style() - # The app state the component is connected to. - state: Optional[Type[State]] = None - # A mapping from event triggers to event chains. event_triggers: Dict[str, Union[EventChain, Var]] = {} @@ -120,7 +114,7 @@ class Component(Base, ABC): if types._issubclass(field_type, Var): try: # Try to create a var from the value. - kwargs[key] = Var.create(value, is_string=type(value) == str) + kwargs[key] = Var.create(value) # Check that the var type is not None. if kwargs[key] is None: @@ -365,7 +359,7 @@ class Component(Base, ABC): children = [ child if isinstance(child, Component) - else Bare.create(contents=Var.create(child)) + else Bare.create(contents=Var.create(child, is_string=True)) for child in children ] return cls(children=children, **props) @@ -399,19 +393,6 @@ class Component(Base, ABC): child.add_style(style) return self - def set_state(self, state: Type[State]): - """Set the state of the component and its children. - - Args: - state: The state to set. - """ - # Set the state of the component. - self.state = state - - # Set the state of the children. - for child in self.children: - child.set_state(state) - def render(self) -> str: """Render the component. diff --git a/tests/components/base/__init__.py b/tests/components/base/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/components/base/test_bare.py b/tests/components/base/test_bare.py index e05e621cc..04d061044 100644 --- a/tests/components/base/test_bare.py +++ b/tests/components/base/test_bare.py @@ -1,7 +1,6 @@ import pytest from pynecone.components.base.bare import Bare -from pynecone.state import DefaultState @pytest.mark.parametrize( @@ -9,7 +8,7 @@ from pynecone.state import DefaultState [ ("hello", "hello"), ("{}", "{}"), - ("{default_state.name}", "${default_state.name}"), + ("${default_state.name}", "${default_state.name}"), ("{state.name}", "{state.name}"), ], ) @@ -21,5 +20,4 @@ def test_fstrings(contents, expected): expected: The expected output. """ comp = Bare.create(contents) - comp.set_state(DefaultState) - assert str(comp) == f"{{`{expected}`}}" + assert str(comp) == expected diff --git a/tests/components/forms/test_uploads.py b/tests/components/forms/test_uploads.py index 4f6161d0d..025af06c4 100644 --- a/tests/components/forms/test_uploads.py +++ b/tests/components/forms/test_uploads.py @@ -53,7 +53,7 @@ def test_upload_component_render(upload_component): str(upload_component) == f" File(e)}>{({getRootProps, getInputProps}) => ({os.linesep}" + f'type="file"{{...getInputProps()}}/>{os.linesep}' f"{os.linesep}" "{`Drag and drop files here or click to select " "files`})}" @@ -72,7 +72,7 @@ def test_upload_component_with_props_render(upload_component_with_props): f"noDrag={{true}}{os.linesep}" "onDrop={e => File(e)}>{({getRootProps, getInputProps}) => ({os.linesep}" + f'type="file"{{...getInputProps()}}/>{os.linesep}' f"{os.linesep}" "{`Drag and drop files here or click to select " "files`})}" diff --git a/tests/components/test_component.py b/tests/components/test_component.py index 1f88a6e99..9ef5a0ac4 100644 --- a/tests/components/test_component.py +++ b/tests/components/test_component.py @@ -6,7 +6,7 @@ import pynecone as pc from pynecone.components.component import Component, CustomComponent, custom_component from pynecone.components.layout.box import Box from pynecone.event import EVENT_ARG, EVENT_TRIGGERS, EventHandler -from pynecone.state import DefaultState, State +from pynecone.state import State from pynecone.style import Style from pynecone.utils import imports from pynecone.var import Var @@ -434,27 +434,3 @@ def test_get_hooks_nested2(component3, component4): ).get_hooks() == exp_hooks ) - - -def test_set_state(component1, component2, component3): - """Test that setting the state of a component works. - - Args: - component1: test component. - component2: another component. - component3: component with hooks defined. - """ - c2 = component2.create() - c3 = component3.create() - c1 = component1.create(c2, c3) - - # State should be None by default. - assert c1.state is None - assert c2.state is None - assert c3.state is None - - # Setting the parent state should set the child state. - c1.set_state(DefaultState) - assert c1.state == DefaultState - assert c2.state == DefaultState - assert c3.state == DefaultState