{"record":{"id":"ed236575b8392a0b","repo":"reflex-dev/reflex","slug":"computedvarsignatureerror-fget-name-signature","errorCode":null,"errorMessage":"ComputedVarSignatureError(fget.__name__, signature=str(sign))","messagePattern":"ComputedVarSignatureError\\(fget\\.__name__, signature=str\\(sign\\)\\)","errorType":"exception","errorClass":"ComputedVarSignatureError","httpStatus":null,"severity":"error","filePath":"packages/reflex-base/src/reflex_base/vars/base.py","lineNumber":2989,"sourceCode":"        A ComputedVar instance.\n\n    Raises:\n        ValueError: If caching is disabled and an update interval is set.\n        VarDependencyError: If user supplies dependencies without caching.\n        ComputedVarSignatureError: If the getter function has more than one argument.\n    \"\"\"\n    if cache is False and interval is not None:\n        msg = \"Cannot set update interval without caching.\"\n        raise ValueError(msg)\n\n    if cache is False and (deps is not None or auto_deps is False):\n        msg = \"Cannot track dependencies without caching.\"\n        raise VarDependencyError(msg)\n\n    if fget is not None:\n        sign = inspect.signature(fget)\n        if len(sign.parameters) != 1:\n            raise ComputedVarSignatureError(fget.__name__, signature=str(sign))\n\n        if inspect.iscoroutinefunction(fget):\n            computed_var_cls = AsyncComputedVar\n        else:\n            computed_var_cls = ComputedVar\n        return computed_var_cls(\n            fget,\n            initial_value=initial_value,\n            cache=cache,\n            deps=deps,\n            auto_deps=auto_deps,\n            interval=interval,\n            backend=backend,\n            **kwargs,\n        )\n\n    def wrapper(fget: Callable[[BASE_STATE], Any]) -> ComputedVar:\n        if inspect.iscoroutinefunction(fget):","sourceCodeStart":2971,"sourceCodeEnd":3007,"githubUrl":"https://github.com/reflex-dev/reflex/blob/45b8ed5ab735f8a56bbb09a42384f030eb0208e7/packages/reflex-base/src/reflex_base/vars/base.py#L2971-L3007","documentation":"ComputedVarSignatureError is raised when the getter function passed to rx.computed/rx.memo has a number of parameters other than exactly one (the state instance).","triggerScenarios":"Passing a zero-arg lambda or a multi-arg function: rx.computed(lambda: ...) or def f(self, x): ... used as a computed var getter.","commonSituations":"Using a plain function instead of a method on a State class, or converting a helper function with extra parameters into a computed var.","solutions":["Make the getter take exactly one argument (self for state methods)","Pass the state explicitly when using rx.computed(fget) outside a class: rx.computed(lambda state: ...)","Close over extra values instead of taking them as parameters"],"exampleFix":"# before\nrx.computed(lambda: State.count * 2)\n# after\nrx.computed(lambda state: state.count * 2)","handlingStrategy":"type-guard","validationCode":"import inspect\nassert len(inspect.signature(fget).parameters) == 1, 'computed var getter takes exactly one arg (state)'","typeGuard":"def is_valid_getter(f) -> bool:\n    import inspect\n    return callable(f) and len(inspect.signature(f).parameters) == 1","tryCatchPattern":null,"preventionTips":["Always define computed vars as methods on a State subclass taking only self","Lint new computed vars in CI with a signature check"],"tags":["reflex","computed-var","signature","inspection"],"backgroundTag":"callback-signature-mismatch","analyzedSha":"45b8ed5ab735f8a56bbb09a42384f030eb0208e7","analyzedAt":"2026-08-28T19:25:27.644Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}