reflex-dev/reflex · warning

event_chain_kwargs are ignored for EventChainVar values.

Error message

event_chain_kwargs {event_chain_kwargs!r} are ignored for EventChainVar values.

What it means

Reflex's event spec factory (EventSpec.create) emits this Python warning when you pass event_chain_kwargs (e.g. event_loader, or chain-level args like stop_propagation/prevent_default on the chain) together with an already-built EventChainVar. For literal prebuilt chains there is nowhere to attach those kwargs, so they are silently ignored and you are warned.

Solutions

  1. Move the kwargs into the chain construction site — build the chain with the desired options (e.g. rx.chain(..., stop_propagation=True) or pass event_loader where the EventChainVar is created) instead of at the trigger.
  2. If the kwargs are redundant for this usage, delete them; the warning confirms they have no effect.
  3. If you need per-trigger behavior, pass a lambda or action reference rather than a prebuilt EventChainVar, so kwargs compose onto a fresh chain.

Example fix

# before
chain = rx.action(rx.console_log('hi'))
rx.button('Go', on_click=chain, stop_propagation=True)  # warns: ignored

# after
chain = rx.action(rx.console_log('hi'), stop_propagation=True)
rx.button('Go', on_click=chain)
Defensive patterns

Strategy: validation

Validate before calling

from reflex.vars import Var

def is_prebuilt_chain(v) -> bool:
    return isinstance(v, Var) and getattr(v, '_var_type', None).__name__ in ('EventChain',)

# only pass event_chain_kwargs when NOT passing a prebuilt EventChainVar
kwargs = {} if is_prebuilt_chain(on_click) else {'stop_propagation': True}

Type guard

from reflex.event import EventChain

def is_literal_event_chain_var(v) -> bool:
    return f'{type(v).__module__}.{type(v).__name__}' == 'reflex.event.LiteralEventChainVar'

Prevention

When it happens

Trigger: Calling rx.event.run_script(...)/event helpers or wiring an EventChainVar (e.g. a value already created with rx.action(...) / a LiteralEventChainVar) into an event trigger while also passing event_chain_kwargs such as {'event_loader': ...} or stopPropagation-style chain options, e.g. rx.button('Go', on_click=my_chain_var, ...custom kwargs...) via EventSpec.create / add_args / _as_event_spec.

Common situations: Migrating from passing a lambda/state action (which builds the chain lazily and accepts kwargs) to passing a prebuilt Var chain; sharing one prebuilt EventChainVar across components but trying to give each usage different chain kwargs; using .to(EventChain) casts.

Related errors


AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28). Data as JSON: /api/errors/0980f892b0743d3d. Report an issue: GitHub.

Appendix: source

Thrown at packages/reflex-base/src/reflex_base/event/__init__.py:894

            value: The value to create the event chain from.
            args_spec: The args_spec of the event trigger being bound.
            key: The key of the event trigger being bound.
            **event_chain_kwargs: Additional kwargs to pass to the EventChain constructor.

        Returns:
            The event chain.

        Raises:
            ValueError: If the value is not a valid event chain.
        """
        # If it's an event chain var, return it.
        if isinstance(value, Var):
            # Only pass through literal/prebuilt chains. Other EventChainVar values may be
            # FunctionVars cast with `.to(EventChain)` and still need wrapping so
            # event_chain_kwargs can compose onto the resulting chain.
            if isinstance(value, LiteralEventChainVar):
                if event_chain_kwargs:
                    warnings.warn(
                        f"event_chain_kwargs {event_chain_kwargs!r} are ignored for "
                        "EventChainVar values.",
                        stacklevel=2,
                    )
                return value
            if isinstance(value, (EventVar, FunctionVar)):
                value = [value]
            elif safe_issubclass(value._var_type, (EventChain, EventSpec)):
                return cls.create(
                    value=value.guess_type(),
                    args_spec=args_spec,
                    key=key,
                    **event_chain_kwargs,
                )
            else:
                msg = f"Invalid event chain: {value!s} of type {value._var_type}"
                raise ValueError(msg)
        elif isinstance(value, EventChain):

View on GitHub (pinned to 45b8ed5ab7)