Regression (beta.36): debounced client-side search re-renders a virtualized list with blank rows instead of filtering
Nobody has claimed this yet.
- 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
debouncedSearchsignal also drives a server-mode code path (a separateuseTask$that callsnav()); that path still works on beta.36 — so signal propagation to auseTask$is intact. - Converting the filtering
useComputed$into a plain signal written by a sole-writeruseTask$(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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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