{"record":{"id":"2fe12ca3a6efd340","repo":"reflex-dev/reflex","slug":"event-handler-self-fn-name-received-repeated","errorCode":null,"errorMessage":"Event handler {self.fn.__name__} received repeated argument {repeated_arg}.","messagePattern":"Event handler (.+?) received repeated argument (.+?)\\.","errorType":"exception","errorClass":"EventHandlerTypeError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/event/__init__.py","lineNumber":631,"sourceCode":"            EventHandlerTypeError: If the arguments are invalid.\n        \"\"\"\n        from reflex_base.utils.exceptions import EventHandlerTypeError\n\n        # Get the function args.\n        if self.state is not None:\n            # Skip the `self` arg for state-bound event handlers.\n            fn_args = list(self._parameters)[1:]\n        else:\n            fn_args = list(self._parameters)\n\n        if not isinstance(\n            repeated_arg := next(\n                (kwarg for kwarg in kwargs if kwarg in fn_args[: len(args)]), Unset()\n            ),\n            Unset,\n        ):\n            msg = f\"Event handler {self.fn.__name__} received repeated argument {repeated_arg}.\"\n            raise EventHandlerTypeError(msg)\n\n        if not isinstance(\n            extra_arg := next(\n                (kwarg for kwarg in kwargs if kwarg not in fn_args), Unset()\n            ),\n            Unset,\n        ):\n            msg = (\n                f\"Event handler {self.fn.__name__} received extra argument {extra_arg}.\"\n            )\n            raise EventHandlerTypeError(msg)\n\n        fn_args = fn_args[: len(args)] + list(kwargs)\n        event_args = [*args, *kwargs.values()]\n\n        # Construct the payload.\n        payload = []\n        upload_event_spec = None","sourceCodeStart":613,"sourceCodeEnd":649,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/event/__init__.py#L613-L649","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"# before\nrx.button('Go', on_click=State.set_values(1, a=2))\n# after\nrx.button('Go', on_click=State.set_values(1, 2))","handlingStrategy":"validation","validationCode":"import inspect\n\ndef check_no_repeat(fn, *args, **kwargs):\n    params = list(inspect.signature(fn).parameters)\n    covered = params[:len(args)]\n    dup = [k for k in kwargs if k in covered]\n    assert not dup, f'repeated args: {dup}'","typeGuard":null,"tryCatchPattern":"try:\n    spec = State.my_event(1, a=2)\nexcept EventHandlerTypeError as e:\n    # log and fix call site\n    raise","preventionTips":["Pick one calling style (all keyword) for event handler invocations in a codebase","Lint event calls in CI via a small wrapper"],"tags":["reflex","event-handler","argument-error"],"backgroundTag":"duplicate-argument-error","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}