Skip to content

Regression (beta.36): debounced client-side search re-renders a virtualized list with blank rows instead of filtering #8739

Description

@v0lt-systems

Which component is affected?

Qwik Runtime (@qwik.dev/core)

Version

Regressed in 2.0.0-beta.36 (works in 2.0.0-beta.35). @qwik.dev/core + @qwik.dev/router 2.0.0-beta.36, @qwik.dev/optimizer 2.1.0-beta.5, Vite 8.0.16, Node 22, dev SSR mode (vite --mode ssr).

Describe the bug

A client-side data grid filters its rows reactively from a debounced search signal. The chain:

<input onInput$> → localSearch (signal) → a useTask$ that setTimeout-writes debouncedSearch (signal) → a useComputed$ that filters/sorts/paginates props.rows by debouncedSearch.value → rendered through a row virtualizer.

On beta.35 this filters correctly. On beta.36, typing a query re-renders the table body as blank rows — the row <tr> structure stays (~same count) but cell content is gone, the filter is not applied (no reduction in row count, no empty-state), and the controlled <input value={localSearch.value}> snaps back to empty. No console error or exception is thrown.

Diagnosis / narrowing (in case it helps)

  • The same debouncedSearch signal also drives a server-mode code path (a separate useTask$ that calls nav()); that path still works on beta.36 — so signal propagation to a useTask$ is intact.
  • Converting the filtering useComputed$ into a plain signal written by a sole-writer useTask$ (tracking all inputs explicitly) did not fix it — so the row-data computation isn't the failing link.
  • The "structure stays, cells go blank" symptom points at the cell-render / virtualization layer re-rendering against the updated search signal, rather than at the filtering logic.
  • Possibly related to the beta.36 scheduler changes (fix: render waits for async visible tasks to resolve #8622 "render no longer waits for useVisibleTask$" and the streaming / stale-DOM fixes).

Reproduction

I don't yet have a minimal StackBlitz — this surfaced in a large app and I haven't isolated the exact primitive. I'm happy to build a minimal reproduction (client list + debounced useTask$ search + useComputed$ filter + virtualization) if a maintainer confirms that would help. Flagging now in case the symptom + narrowing already rings a bell against the beta.36 scheduler work.

Expected

Updating the debounced search signal re-renders the virtualized list with the filtered rows (or an empty-state), as on beta.35.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions