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
- Remove default= and keep default_factory for mutable defaults
- 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
- Use default_factory for mutable defaults and omit default
- Use default for immutables and omit default_factory
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
- No default value or factory provided.
- `rx.EventHandler` parameter `{parameter.name}` in `{fn_name}
- cannot specify both default and default_factory
- ChildrenTypeError(component=cls.__name__, child=child)
- Do not override _add_style directly. Use add_style instead.
AI-assisted analysis of reflex-dev/reflex@45b8ed5ab7 (2026-08-28).
Data as JSON: /api/errors/46f48f1c40581a36.
Report an issue: GitHub.