浏览代码

Add component memoization (#770)

Nikhil Rao 2 年之前
父节点
当前提交
8eea6ac822
共有 2 个文件被更改,包括 24 次插入2 次删除
  1. 1 1
      pynecone/__init__.py
  2. 23 1
      tests/components/test_component.py

+ 1 - 1
pynecone/__init__.py

@@ -7,7 +7,7 @@ from . import el
 from .app import App, UploadFile
 from .base import Base
 from .components import *
-from .components.component import custom_component as component
+from .components.component import custom_component as memo
 from .components.graphing.victory import data
 from .config import Config
 from .constants import Env, Transports

+ 23 - 1
tests/components/test_component.py

@@ -2,7 +2,8 @@ from typing import Dict, List, Type
 
 import pytest
 
-from pynecone.components.component import Component, CustomComponent
+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 State
@@ -311,6 +312,27 @@ def test_custom_component_hash(my_component):
     assert {component1, component2} == {component1}
 
 
+def test_custom_component_wrapper():
+    """Test that the wrapper of a custom component is correct."""
+
+    @custom_component
+    def my_component(width: Var[int], color: Var[str]):
+        return pc.box(
+            width=width,
+            color=color,
+        )
+
+    ccomponent = my_component(
+        pc.text("child"), width=Var.create(1), color=Var.create("red")
+    )
+    assert isinstance(ccomponent, CustomComponent)
+    assert len(ccomponent.children) == 1
+    assert isinstance(ccomponent.children[0], pc.Text)
+
+    component = ccomponent.get_component()
+    assert isinstance(component, Box)
+
+
 def test_invalid_event_handler_args(component2, TestState):
     """Test that an invalid event handler raises an error.