{"record":{"id":"265d8afa96fa59a4","repo":"reflex-dev/reflex","slug":"on-upload-progress-cannot-return-a-var-events","errorCode":null,"errorMessage":"{on_upload_progress} cannot return a var {events}.","messagePattern":"(.+?) cannot return a var (.+?)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/event/__init__.py","lineNumber":1345,"sourceCode":"            on_upload_progress = self.on_upload_progress\n            if isinstance(on_upload_progress, EventHandler):\n                events = [\n                    call_event_handler(\n                        on_upload_progress,\n                        self.on_upload_progress_args_spec,\n                    ),\n                ]\n            elif isinstance(on_upload_progress, Callable):\n                # Call the lambda to get the event chain.\n                events = call_event_fn(\n                    on_upload_progress, self.on_upload_progress_args_spec\n                )\n            else:\n                msg = f\"{on_upload_progress} is not a valid event handler.\"\n                raise ValueError(msg)\n            if isinstance(events, Var):\n                msg = f\"{on_upload_progress} cannot return a var {events}.\"\n                raise ValueError(msg)\n            on_upload_progress_chain = EventChain(\n                events=[*events],\n                args_spec=self.on_upload_progress_args_spec,\n            )\n            formatted_chain = str(format.format_prop(on_upload_progress_chain))\n            spec_args.append(\n                (\n                    Var(_js_expr=\"on_upload_progress\"),\n                    FunctionStringVar(\n                        formatted_chain.strip(\"{}\"),\n                    ).to(FunctionVar, EventChain),\n                ),\n            )\n        return EventSpec(\n            handler=handler,\n            client_handler_name=client_handler_name,\n            args=tuple(spec_args),\n            event_actions=handler.event_actions.copy(),","sourceCodeStart":1327,"sourceCodeEnd":1363,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/event/__init__.py#L1327-L1363","documentation":"The on_upload_progress lambda is called to build its event chain; if it returns a Var instead of an EventChain/EventSpec, the framework cannot serialize it as an event trigger and rejects it.","triggerScenarios":"on_upload_progress=lambda p: State.messages  (returns a Var) instead of returning an event call.","commonSituations":"Writing a lambda that indexes state or returns a computed value rather than triggering an event handler call.","solutions":["Make the lambda return an event handler invocation: lambda p: State.set_progress(p.progress)","If you only need a value displayed, bind it as a Var on the component, not via on_upload_progress"],"exampleFix":"# before\non_upload_progress=lambda e: State.upload_msg\n# after\non_upload_progress=lambda e: State.set_upload_msg(e.progress)","handlingStrategy":"validation","validationCode":"# smoke-test the lambda at authoring time\nresult = my_lambda(fake_event)\nassert not hasattr(result, '_var_type'), 'progress lambda must return an event, not a Var'","typeGuard":"def returns_event(fn) -> bool: r = fn(_FakeEvent()); return isinstance(r, (EventSpec, EventChain))","tryCatchPattern":null,"preventionTips":["Progress lambdas should call a state setter; never return state values"],"tags":["reflex","file-upload","var-misuse","lambda"],"backgroundTag":"invalid-event-handler-binding","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}