reflex-dev/reflex · error · VarDependencyError

ComputedVar dependencies must be Var instances with a state…

Error message

ComputedVar dependencies must be Var instances with a state and field name, got {dep!r}.

What it means

add_dependency (used to wire explicit deps for a ComputedVar) requires the dependency Var to carry both a state name and a field name in its VarData. If the Var has no var data at all, or its state/field_name is missing (e.g. a raw LiteralVar or an unlinked expression), VarDependencyError is raised. VarDependencyError subclasses RuntimeError, so it escapes 'except TypeError' handlers.

Solutions

  1. Reference real State attributes in deps so the Var carries state+field metadata: deps=[State.other_value] or deps=[self.other_value]
  2. For name-based deps, pass plain strings: deps=['other_value'] (handled by the string branch, not add_dependency)
  3. If building Vars programmatically, ensure _var_data includes state and field_name (VarData(state=..., field_name=...)) before using as a dep

Example fix

# before
@rx.var(deps=[rx.Var('counter')])  # no state/field metadata
def doubled(self) -> int:
    return self.counter * 2

# after
class State(rx.State):
    counter: int = 0

    @rx.var(deps=[State.counter])
    def doubled(self) -> int:
        return self.counter * 2
    # or deps=['counter']
Defensive patterns

Strategy: type-guard

Validate before calling

from reflex.vars import Var

def deps_with_var_data(deps):
    out = []
    for d in deps:
        if isinstance(d, str) and d:
            out.append(d)
        elif isinstance(d, Var) and (data := d._get_all_var_data()) and data.state and data.field_name:
            out.append(d)
    return out

Type guard

from reflex.vars import Var

def is_state_linked_var(dep) -> bool:
    if not isinstance(dep, Var):
        return False
    data = dep._get_all_var_data()
    return bool(data and data.state and data.field_name)

Try / catch

from reflex.vars import VarDependencyError

try:
    cv.add_dependency(state_cls, dep)
except VarDependencyError:
    # fall back to name-based dependency wiring
    state_cls._var_dependencies.setdefault(dep_name := str(dep), set()).add((state_cls.get_full_name(), cv._name))

Prevention

When it happens

Trigger: Passing a literal or plain expression as a dependency: deps=[rx.Var('x')], a number/string literal Var, or a Var whose _var_data was stripped during compilation; calling ComputedVar.add_dependency(objclass, dep) where dep is not attached to any State field.

Common situations: Declaring deps with hand-constructed Vars instead of State attributes (deps=[State.counter] works; deps=[rx.Var('counter')] does not); dependency Vars created via string concatenation or operations that drop var data; compiler/state-machinery edge cases after refactoring State hierarchies.

Related errors


AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28). Data as JSON: /api/errors/2b924ba79459680a. Report an issue: GitHub.

Appendix: source

Thrown at packages/reflex-base/src/reflex_base/vars/base.py:2716

                    self._static_deps.setdefault(state_name, set()).add(var_name)
                    target_state_class = objclass.get_root_state().get_class_substate(
                        state_name
                    )
                    target_state_class._var_dependencies.setdefault(
                        var_name, set()
                    ).add((
                        objclass.get_full_name(),
                        self._name,
                    ))
                    target_state_class._potentially_dirty_states.add(
                        objclass.get_full_name()
                    )
                    return
        msg = (
            "ComputedVar dependencies must be Var instances with a state and "
            f"field name, got {dep!r}."
        )
        raise VarDependencyError(msg)

    def _determine_var_type(self) -> type:
        """Get the type of the var.

        Returns:
            The type of the var.
        """
        hints = get_type_hints(self._fget)
        if "return" in hints:
            return hints["return"]
        return Any  # pyright: ignore [reportReturnType]

    @property
    def __class__(self) -> type:
        """The class of the var.

        Returns:
            The class of the var.

View on GitHub (pinned to 45b8ed5ab7)