QwikDev / QwikDev/qwik

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

Open
#8,739 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug needs reproduction runtime
Dominant language
TypeScript
Stars
22.1k
Forks
1.4k
Avg merge
1d 10h
Merged PRs (30d)
52

Description

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 (#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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No source file or test is named, and the report has no minimal reproduction. Start by comparing beta.35 and beta.36 with a small client-side virtualized list using debounced useTask$ search and useComputed$ filtering, then inspect the scheduler and streaming changes referenced in #8622. Done means the input remains controlled and the virtualized rows show filtered results or the empty state without errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
frontend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.