make all triggers disable recurisve memoization (#4719)
This commit is contained in:
parent
2c3257d4ea
commit
12bda1d4f5
@ -1944,7 +1944,7 @@ class StatefulComponent(BaseComponent):
|
||||
|
||||
if not should_memoize:
|
||||
# Determine if any Vars have associated data.
|
||||
for prop_var in component._get_vars():
|
||||
for prop_var in component._get_vars(include_children=True):
|
||||
if prop_var._get_all_var_data():
|
||||
should_memoize = True
|
||||
break
|
||||
@ -2327,8 +2327,8 @@ class MemoizationLeaf(Component):
|
||||
"""
|
||||
comp = super().create(*children, **props)
|
||||
if comp._get_all_hooks():
|
||||
comp._memoization_mode = cls._memoization_mode.copy(
|
||||
update={"disposition": MemoizationDisposition.ALWAYS}
|
||||
comp._memoization_mode = dataclasses.replace(
|
||||
comp._memoization_mode, disposition=MemoizationDisposition.ALWAYS
|
||||
)
|
||||
return comp
|
||||
|
||||
|
@ -10,6 +10,7 @@ from reflex.components.core.cond import cond
|
||||
from reflex.components.lucide.icon import Icon
|
||||
from reflex.components.radix.primitives.base import RadixPrimitiveComponent
|
||||
from reflex.components.radix.themes.base import LiteralAccentColor, LiteralRadius
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler
|
||||
from reflex.style import Style
|
||||
from reflex.vars import get_uuid_string_var
|
||||
@ -342,6 +343,8 @@ class AccordionTrigger(AccordionComponent):
|
||||
|
||||
alias = "RadixAccordionTrigger"
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
@classmethod
|
||||
def create(cls, *children, **props) -> Component:
|
||||
"""Create the Accordion trigger component.
|
||||
|
@ -10,6 +10,7 @@ from reflex.components.component import Component, ComponentNamespace
|
||||
from reflex.components.radix.primitives.base import RadixPrimitiveComponent
|
||||
from reflex.components.radix.themes.base import Theme
|
||||
from reflex.components.radix.themes.layout.flex import Flex
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -85,6 +86,8 @@ class DrawerTrigger(DrawerComponent):
|
||||
# Defaults to true, if the first child acts as the trigger.
|
||||
as_child: Var[bool] = Var.create(True)
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
@classmethod
|
||||
def create(cls, *children: Any, **props: Any) -> Component:
|
||||
"""Create a new DrawerTrigger instance.
|
||||
|
@ -5,6 +5,7 @@ from typing import Literal
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.components.el import elements
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -33,6 +34,8 @@ class AlertDialogTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
tag = "AlertDialog.Trigger"
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class AlertDialogContent(elements.Div, RadixThemesComponent):
|
||||
"""Contains the content of the dialog. This component is based on the div element."""
|
||||
|
@ -4,6 +4,7 @@ from typing import Dict, List, Literal, Union
|
||||
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -55,6 +56,8 @@ class ContextMenuTrigger(RadixThemesComponent):
|
||||
|
||||
_invalid_children: List[str] = ["ContextMenuContent"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class ContextMenuContent(RadixThemesComponent):
|
||||
"""The component that pops out when the context menu is open."""
|
||||
@ -153,6 +156,8 @@ class ContextMenuSubTrigger(RadixThemesComponent):
|
||||
|
||||
_valid_parents: List[str] = ["ContextMenuContent", "ContextMenuSub"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class ContextMenuSubContent(RadixThemesComponent):
|
||||
"""The component that pops out when a submenu is open."""
|
||||
|
@ -5,6 +5,7 @@ from typing import Literal
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.components.el import elements
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -31,6 +32,8 @@ class DialogTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
tag = "Dialog.Trigger"
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class DialogTitle(RadixThemesComponent):
|
||||
"""Title component to display inside a Dialog modal."""
|
||||
|
@ -4,6 +4,7 @@ from typing import Dict, List, Literal, Union
|
||||
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -60,6 +61,8 @@ class DropdownMenuTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
_invalid_children: List[str] = ["DropdownMenuContent"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class DropdownMenuContent(RadixThemesComponent):
|
||||
"""The Dropdown Menu Content component that pops out when the dropdown menu is open."""
|
||||
@ -143,6 +146,8 @@ class DropdownMenuSubTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
_valid_parents: List[str] = ["DropdownMenuContent", "DropdownMenuSub"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class DropdownMenuSub(RadixThemesComponent):
|
||||
"""Contains all the parts of a submenu."""
|
||||
|
@ -5,6 +5,7 @@ from typing import Dict, Literal, Union
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.components.el import elements
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -37,6 +38,8 @@ class HoverCardTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
tag = "HoverCard.Trigger"
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class HoverCardContent(elements.Div, RadixThemesComponent):
|
||||
"""Contains the content of the open hover card."""
|
||||
|
@ -5,6 +5,7 @@ from typing import Dict, Literal, Union
|
||||
from reflex.components.component import ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.components.el import elements
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -34,6 +35,8 @@ class PopoverTrigger(RadixThemesTriggerComponent):
|
||||
|
||||
tag = "Popover.Trigger"
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class PopoverContent(elements.Div, RadixThemesComponent):
|
||||
"""Contains content to be rendered in the open popover."""
|
||||
|
@ -5,6 +5,7 @@ from typing import List, Literal, Union
|
||||
import reflex as rx
|
||||
from reflex.components.component import Component, ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import no_args_event_spec, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -69,6 +70,8 @@ class SelectTrigger(RadixThemesComponent):
|
||||
|
||||
_valid_parents: List[str] = ["SelectRoot"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
|
||||
class SelectContent(RadixThemesComponent):
|
||||
"""The component that pops out when the select is open."""
|
||||
|
@ -7,6 +7,7 @@ from typing import Any, Dict, List, Literal
|
||||
from reflex.components.component import Component, ComponentNamespace
|
||||
from reflex.components.core.breakpoints import Responsive
|
||||
from reflex.components.core.colors import color
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import EventHandler, passthrough_event_spec
|
||||
from reflex.vars.base import Var
|
||||
|
||||
@ -95,6 +96,8 @@ class TabsTrigger(RadixThemesComponent):
|
||||
|
||||
_valid_parents: List[str] = ["TabsList"]
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
@classmethod
|
||||
def create(cls, *children, **props) -> Component:
|
||||
"""Create a TabsTrigger component.
|
||||
|
@ -1,10 +1,10 @@
|
||||
"""Compiler variables."""
|
||||
|
||||
import dataclasses
|
||||
import enum
|
||||
from enum import Enum
|
||||
from types import SimpleNamespace
|
||||
|
||||
from reflex.base import Base
|
||||
from reflex.constants import Dirs
|
||||
from reflex.utils.imports import ImportVar
|
||||
|
||||
@ -151,7 +151,8 @@ class MemoizationDisposition(enum.Enum):
|
||||
NEVER = "never"
|
||||
|
||||
|
||||
class MemoizationMode(Base):
|
||||
@dataclasses.dataclass(frozen=True)
|
||||
class MemoizationMode:
|
||||
"""The mode for memoizing a Component."""
|
||||
|
||||
# The conditions under which the component should be memoized.
|
||||
|
@ -12,6 +12,7 @@ from reflex.components.radix.themes.components.icon_button import IconButton
|
||||
from reflex.components.radix.themes.layout.box import Box
|
||||
from reflex.components.radix.themes.layout.container import Container
|
||||
from reflex.components.radix.themes.layout.stack import HStack
|
||||
from reflex.constants.compiler import MemoizationMode
|
||||
from reflex.event import run_script
|
||||
from reflex.experimental import hooks
|
||||
from reflex.state import ComponentState
|
||||
@ -146,6 +147,8 @@ sidebar_trigger_style = {
|
||||
class SidebarTrigger(Fragment):
|
||||
"""A component that renders the sidebar trigger."""
|
||||
|
||||
_memoization_mode = MemoizationMode(recursive=False)
|
||||
|
||||
@classmethod
|
||||
def create(cls, sidebar: Component, **props):
|
||||
"""Create the sidebar trigger component.
|
||||
|
Loading…
Reference in New Issue
Block a user