{"record":{"id":"769203046fed75f8","repo":"reflex-dev/reflex","slug":"invalid-event-v","errorCode":null,"errorMessage":"Invalid event: {v}","messagePattern":"Invalid event: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/event/__init__.py","lineNumber":938,"sourceCode":"        events: list[EventSpec | EventVar | FunctionVar] = []\n\n        # If the input is a list of event handlers, create an event chain.\n        if isinstance(value, list):\n            for v in value:\n                if isinstance(v, (EventHandler, EventSpec)):\n                    # Call the event handler to get the event.\n                    events.append(call_event_handler(v, args_spec, key=key))\n                elif isinstance(v, (EventVar, EventChainVar)):\n                    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(","sourceCodeStart":920,"sourceCodeEnd":956,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/event/__init__.py#L920-L956","documentation":"Inside a list passed to an event trigger, each element must be an EventHandler, EventSpec, or Callable (lambda). Any other element (a Var, string, number, None) cannot be interpreted as an event and raises ValueError.","triggerScenarios":"on_click=[State.a, 'state.b', 42] or a list containing None / a Var alongside valid handlers.","commonSituations":"Conditionally building event lists and letting a non-event fallback slip in (e.g. [handler] if cond else [None]); mixing string handler names from older Reflex versions into modern lists.","solutions":["Filter the list so it only contains EventHandler/EventSpec/lambda values","Replace stray values with real event calls (or remove them)","For optional events use an empty list or a no-op handler instead of None"],"exampleFix":"# before\non_click=[State.a, None]\n# after\non_click=[State.a]","handlingStrategy":"validation","validationCode":"from reflex_base.event import EventHandler, EventSpec\nfrom collections.abc import Callable\n\ndef all_events(items):\n    return all(isinstance(i, (EventHandler, EventSpec)) or callable(i) for i in items)","typeGuard":"def is_valid_event_list(items) -> TypeGuard[list]: return isinstance(items, list) and all(isinstance(i, (EventHandler, EventSpec, Callable)) for i in items)","tryCatchPattern":null,"preventionTips":["Build event lists conditionally but filter out None/non-events before passing","Prefer single handler chains over hand-built lists"],"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"}