{"record":{"id":"d823086c6cf6be49","repo":"reflex-dev/reflex","slug":"invalid-event-chain-value","errorCode":null,"errorMessage":"Invalid event chain: {value}","messagePattern":"Invalid event chain: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/event/__init__.py","lineNumber":947,"sourceCode":"                    events.append(v)\n                elif isinstance(v, FunctionVar):\n                    # Apply the args_spec transformations as partial arguments to the function.\n                    events.append(v.partial(*parse_args_spec(args_spec)[0]))\n                elif isinstance(v, Callable):\n                    # Call the lambda to get the event chain.\n                    events.extend(call_event_fn(v, args_spec, key=key))\n                else:\n                    msg = f\"Invalid event: {v}\"\n                    raise ValueError(msg)\n\n        # If the input is a callable, create an event chain.\n        elif isinstance(value, Callable):\n            events.extend(call_event_fn(value, args_spec, key=key))\n\n        # Otherwise, raise an error.\n        else:\n            msg = f\"Invalid event chain: {value}\"\n            raise ValueError(msg)\n\n        # Add args to the event specs if necessary.\n        events = [\n            (e.with_args(get_handler_args(e)) if isinstance(e, EventSpec) else e)\n            for e in events\n        ]\n\n        # Return the event chain.\n        return cls(\n            events=events,\n            args_spec=args_spec,\n            **event_chain_kwargs,\n        )\n\n\n@dataclasses.dataclass(\n    init=True,\n    frozen=True,","sourceCodeStart":929,"sourceCodeEnd":965,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/event/__init__.py#L929-L965","documentation":"EventChain.create raises this when the value is not an EventHandler, EventSpec, EventChain, list/tuple of those, or Callable — i.e. a completely unrecognizable type was supplied where an event trigger is required.","triggerScenarios":"Passing raw values like an int, string, dict, or object to an event prop: on_click='handle_click', on_click=1, on_click={'a': State.a}.","commonSituations":"Passing a string handler name (a very old Reflex pattern), passing a value from untyped data (JSON config), or wiring dynamic event maps incorrectly.","solutions":["Pass the actual event handler or a call to it: on_click=State.handle_click","Wrap foreign data in a lambda that dispatches to the right handler","Validate dynamic event sources before assigning them to props"],"exampleFix":"# before\nrx.button('Go', on_click='handle_click')\n# after\nrx.button('Go', on_click=State.handle_click)","handlingStrategy":"type-guard","validationCode":"from reflex_base.event import EventHandler, EventSpec, EventChain\nfrom collections.abc import Callable\n\ndef ok(v) -> bool:\n    return isinstance(v, (EventHandler, EventSpec, EventChain, Callable)) or (isinstance(v, (list, tuple)) and all(ok(i) for i in v))","typeGuard":"def is_event_spec_like(v) -> TypeGuard[object]: return callable(v) or isinstance(v, (EventHandler, EventSpec, EventChain))","tryCatchPattern":null,"preventionTips":["Pass handler references or calls, never names/strings/raw data","Type on_* props in shared component wrappers"],"tags":["reflex","event-chain","validation"],"backgroundTag":"invalid-event-handler-binding","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}