reflex-dev/reflex · error · ValueError

cannot specify both default and default_factory

Error message

cannot specify both default and default_factory

What it means

rx.Field() rejects specifying both default and default_factory because the resulting value would be ambiguous — mirrors dataclasses.field semantics.

Source

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

    default_factory: Callable[[], FIELD_TYPE] | None = None,
    is_var: bool = True,
) -> Field[FIELD_TYPE] | FIELD_TYPE:
    """Create a field for a state.

    Args:
        default: The default value for the field.
        default_factory: The default factory for the field.
        is_var: Whether the field is a Var.

    Returns:
        The field for the state.

    Raises:
        ValueError: If both default and default_factory are specified.
    """
    if default is not MISSING and default_factory is not None:
        msg = "cannot specify both default and default_factory"
        raise ValueError(msg)
    if default is not MISSING and not types.is_immutable(default):
        logger.warning(
            "Mutable default values are not recommended. "
            "Use default_factory instead to avoid unexpected behavior."
        )
        return Field(
            default_factory=functools.partial(copy.deepcopy, default),
            is_var=is_var,
        )
    return Field(
        default=default,
        default_factory=default_factory,
        is_var=is_var,
    )


@dataclass_transform(kw_only_default=True, field_specifiers=(field,))
class BaseStateMeta(ABCMeta):

View on GitHub (pinned to 45b8ed5ab7)

Solutions

  1. Remove default= and keep default_factory for mutable defaults
  2. For immutable defaults (int, str, tuple), keep default= and drop default_factory

Example fix

# before
rx.Field(default=[], default_factory=list)
# after
rx.Field(default_factory=list)
Defensive patterns

Strategy: validation

Validate before calling

assert not (default is not MISSING and default_factory is not None), 'pick one of default/default_factory'

Prevention

When it happens

Trigger: rx.Field(default=[], default_factory=list) or any call passing both.

Common situations: Copying a dataclass field definition into reflex state; refactoring from default to default_factory and forgetting to delete the old default.

Related errors


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