reflex-dev/reflex · error · TypeError
ComputedVar dependencies must be Var instances or var names
Error message
ComputedVar dependencies must be Var instances or var names (non-empty strings).
What it means
When you declare explicit dependencies for a ComputedVar via deps=[...], each entry must be either a Var instance or a non-empty string naming another var. Anything else (None, empty string, int, arbitrary objects) raises this TypeError during dependency setup.
Source
Thrown at packages/reflex-base/src/reflex_base/vars/base.py:2423
"""
if deps is None:
deps = self._static_deps
if isinstance(dep, Var):
state_name = (
all_var_data.state
if (all_var_data := dep._get_all_var_data()) and all_var_data.state
else None
)
if all_var_data is not None:
var_name = all_var_data.field_name
else:
var_name = dep._js_expr
deps.setdefault(state_name, set()).add(var_name)
elif isinstance(dep, str) and dep != "":
deps.setdefault(None, set()).add(dep)
else:
msg = "ComputedVar dependencies must be Var instances or var names (non-empty strings)."
raise TypeError(msg)
return deps
@override
def _replace(
self,
merge_var_data: VarData | None = None,
**kwargs: Any,
) -> Self:
"""Replace the attributes of the ComputedVar.
Args:
merge_var_data: VarData to merge into the existing VarData.
**kwargs: Var fields to update.
Returns:
The new ComputedVar instance.
Raises:View on GitHub (pinned to 45b8ed5ab7)
Solutions
- Filter/validate deps before passing: keep only Var instances and non-empty strings
- Reference dependencies as state var names, e.g. deps=[State.other_value] or deps=['other_value']
- Check for None/empty entries introduced by conditional logic in dynamically-built dep lists
Example fix
# before @rx.var(deps=[self.first_name if flag else None]) def greeting(self) -> str: ... # after @rx.var(deps=[State.first_name]) def greeting(self) -> str: ... # or for dynamic lists: deps = [d for d in maybe_deps if isinstance(d, (str, rx.Var)) and d]
Defensive patterns
Strategy: validation
Validate before calling
from reflex.vars import Var
def valid_deps(deps) -> list:
return [d for d in deps if isinstance(d, Var) or (isinstance(d, str) and d)]
# usage
rx.var(deps=valid_deps(candidate_deps))(fn) Type guard
from reflex.vars import Var
def is_valid_dep(dep) -> bool:
return isinstance(dep, Var) or (isinstance(dep, str) and dep != '') Try / catch
try:
cv = rx.var(deps=deps)(fn)
except TypeError as e:
if 'dependencies must be Var instances' in str(e):
cv = rx.var(deps=[d for d in deps if isinstance(d, (Var, str)) and d])(fn)
else:
raise Prevention
- Build dep lists only from State attribute Vars or non-empty name strings
- Filter conditional dep lists to drop None/empty entries before passing
- Never pass functions/lambdas or literals in deps
When it happens
Trigger: Passing deps=[None], deps=[''], deps=[0], or a list containing a lambda/function or plain object to rx.var(deps=...) / ComputedVar(deps=...); building deps programmatically and including an uninitialized/None entry.
Common situations: Conditionally collecting dependency names into a list and leaving None placeholders; passing a method/function instead of a Var or its name; copy-pasting a deps list from a State where the referenced Var was renamed or deleted.
Related errors
- ComputedVar dependencies must be Var instances with a state
- The component `{comp_name}` only allows the components: {val
- UntypedComputedVarError(var_name=fget.__name__)
- Unexpected keyword arguments: {tuple(kwargs)}
- Unexpected keyword arguments: {unexpected_kwargs}
AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28).
Data as JSON: /api/errors/8e133931f6f8ac00.
Report an issue: GitHub.