reflex-dev/reflex · error · EventHandlerTypeError
Event handler {self.fn.__name__} received repeated argument
Error message
Event handler {self.fn.__name__} received repeated argument {repeated_arg}. What it means
When calling an event handler (e.g. State.my_event(arg1, arg2)) the framework builds the event payload and detects that the same parameter was supplied twice — once positionally and once as a keyword.
Source
Thrown at packages/reflex-base/src/reflex_base/event/__init__.py:631
EventHandlerTypeError: If the arguments are invalid.
"""
from reflex_base.utils.exceptions import EventHandlerTypeError
# Get the function args.
if self.state is not None:
# Skip the `self` arg for state-bound event handlers.
fn_args = list(self._parameters)[1:]
else:
fn_args = list(self._parameters)
if not isinstance(
repeated_arg := next(
(kwarg for kwarg in kwargs if kwarg in fn_args[: len(args)]), Unset()
),
Unset,
):
msg = f"Event handler {self.fn.__name__} received repeated argument {repeated_arg}."
raise EventHandlerTypeError(msg)
if not isinstance(
extra_arg := next(
(kwarg for kwarg in kwargs if kwarg not in fn_args), Unset()
),
Unset,
):
msg = (
f"Event handler {self.fn.__name__} received extra argument {extra_arg}."
)
raise EventHandlerTypeError(msg)
fn_args = fn_args[: len(args)] + list(kwargs)
event_args = [*args, *kwargs.values()]
# Construct the payload.
payload = []
upload_event_spec = NoneView on GitHub (pinned to 45b8ed5ab7)
Solutions
- Pass each argument only once — use either positional or keyword for a given parameter
- Rename the keyword argument to match a different parameter or remove the redundant one
Example fix
# before
rx.button('Go', on_click=State.set_values(1, a=2))
# after
rx.button('Go', on_click=State.set_values(1, 2)) Defensive patterns
Strategy: validation
Validate before calling
import inspect
def check_no_repeat(fn, *args, **kwargs):
params = list(inspect.signature(fn).parameters)
covered = params[:len(args)]
dup = [k for k in kwargs if k in covered]
assert not dup, f'repeated args: {dup}' Try / catch
try:
spec = State.my_event(1, a=2)
except EventHandlerTypeError as e:
# log and fix call site
raise Prevention
- Pick one calling style (all keyword) for event handler invocations in a codebase
- Lint event calls in CI via a small wrapper
When it happens
Trigger: Invoking an EventHandler with a positional argument followed by a keyword naming a parameter already covered positionally, e.g. state.handle(1, b=2) where handle(self, a, b) and the positional slot already maps to b, or duplicate kwargs colliding after positional mapping.
Common situations: Copy-pasting event triggers in component props and mixing positional/keyword styles; refactoring a handler signature so an old keyword now overlaps a positional arg.
Related errors
- Event handler {self.fn.__name__} received extra argument {ex
- Event handler {self.fn.__name__} received multiple file uplo
- `rx.EventHandler` parameters are only supported on component
- `children` in `{fn_name}` cannot be an `rx.EventHandler`; us
- `rx.EventHandler` parameter `{parameter.name}` in `{fn_name}
AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28).
Data as JSON: /api/errors/2fe12ca3a6efd340.
Report an issue: GitHub.