reflex-dev/reflex · error · ValueError

Undefined library for NoSSRComponent

Error message

Undefined library for NoSSRComponent

What it means

BaseState._deserialize accepts either raw bytes (`data`) or a file object (`fp`), exclusively. Passing both or neither raises ValueError('Only one of `data` or `fp` must be provided').

Source

Thrown at packages/reflex-base/src/reflex_base/components/component.py:2333

        # Do NOT import the main library/tag statically.
        import_name = self._get_import_name()
        if import_name is not None:
            with contextlib.suppress(ValueError):
                imports_[import_name].remove(self.import_var)
            imports_[import_name].append(ImportVar(tag=None, render=False))

        return imports.merge_imports(
            dynamic_import,
            imports_,
            self._get_dependencies_imports(),
        )

    def _get_dynamic_imports(self) -> str:
        # extract the correct import name from library name
        base_import_name = self._get_import_name()
        if base_import_name is None:
            msg = "Undefined library for NoSSRComponent"
            raise ValueError(msg)
        import_name = format.format_library_name(base_import_name)

        library_import = f"import('{import_name}')"
        mod_import = (
            # https://nextjs.org/docs/pages/building-your-application/optimizing/lazy-loading#with-named-exports
            f".then((mod) => mod.{self.tag})"
            if not self.is_default
            else ".then((mod) => mod.default.default ?? mod.default)"
        )
        name = self.alias or self.tag
        return (
            f"const {name} = ClientSide(() => "
            + library_import
            + mod_import
            + f", {json.dumps(name)})"
        )

View on GitHub (pinned to 45b8ed5ab7)

Solutions

  1. Pass exactly one source: `State.deserialize(data=pickled_bytes)` or `State.deserialize(fp=file_obj)`
  2. Default unused parameter to None explicitly

Example fix

// before
state = StateRoot.deserialize(data=buf, fp=fh)
// after
state = StateRoot.deserialize(data=buf)
Defensive patterns

Strategy: validation

Validate before calling

assert (data is None) != (fp is None), "pass exactly one of data or fp"

Try / catch

try:
    st = StateRoot.deserialize(data=data, fp=fp)
except ValueError:
    st = StateRoot.deserialize(data=data)

Prevention

When it happens

Trigger: Calling `State.deserialize(data=buf, fp=fh)` or `State.deserialize()` with no arguments.

Common situations: Custom persistence layers that pass a file and already-read bytes; refactors of deserialization helpers where a parameter becomes None.

Related errors


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