Skip to content

[🐞] <Pending> child reading a signal from its owner breaks when the owner re-renders (consumerBackRef[_EFFECT_BACK_REF].set is not a function) #9166

Closed

Description

@intellix

Which component is affected?

Qwik Runtime

Describe the bug

Which component is affected?

Qwik Runtime

Describe the bug

A component inside <Pending> reads a signal passed in as a prop by the component that renders the <Pending>. When that owner re-renders on the client, the update breaks:

  • Dev: consumerBackRef[_EFFECT_BACK_REF].set is not a function is thrown and the owner's DOM change never appears.
  • Production: no error, but the <Pending> fallback becomes visible and the child is rendered a second time next to the original.

No async work or out-of-order streaming is needed: the content renders in order and nothing ever suspends.

These don't trigger it:

  • <Pending> with only static content.
  • Reading the signal inline inside <Pending> (<p>{text.value}</p>).
  • A child that reads its own signal instead of one passed from the owner.
  • The same tree without <Pending>.

Reproduction

https://stackblitz.com/edit/github-u5aqdquk-66auz4fv?file=src%2Froutes%2Findex.tsx

import { component$, Pending, useSignal, type Signal } from '@qwik.dev/core';

const Reader = component$<{ value: Signal<string> }>(({ value }) => <p>{value.value}</p>);

// The owner re-renders structurally while a child inside <Pending> reads its signal.
export default component$(() => {
  const on = useSignal(false);
  const text = useSignal('hello');
  return (
    <>
      <button onClick$={() => (on.value = !on.value)}>toggle</button>
      {on.value && <b>on</b>}
      <Pending fallback$={() => <p>loading…</p>}>
        <Reader value={text} />
      </Pending>
    </>
  );
});

Steps to reproduce

  1. Open the reproduction (experimental: ['pendingBoundary'] is enabled in qwikVite()).
  2. Click toggle.

Expected: <b>on</b> appears; nothing else changes.

Actual (dev): the console shows QWIK ERROR consumerBackRef[_EFFECT_BACK_REF].set is not a function and <b>on</b> never appears.

Actual (production build): no error, but after the click the page shows <b>on</b>, the visible fallback <p>loading…</p>, and a second <p>hello</p> beside the original.

System Info

@qwik.dev/core   2.0.0-rc.0 (main@5c51580)
@qwik.dev/router 2.0.0-rc.0 (main@5c51580)
vite             8.2.2
node             22.x
macOS

Additional Information

It behaves the same with #9147, #9163 and #9165 applied, so it isn't related to those out-of-order streaming fixes.

Reproduction

https://stackblitz.com/edit/github-u5aqdquk-66auz4fv?file=src%2Froutes%2Findex.tsx

Steps to reproduce

No response

System Info

System:
    OS: Linux 5.0 undefined
    CPU: (8) x64 Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
    Memory: 0 Bytes / 0 Bytes
    Shell: 1.0 - /bin/jsh
  Binaries:
    Node: 22.22.3 - /usr/local/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 10.8.2 - /usr/local/bin/npm
    pnpm: 8.15.6 - /usr/local/bin/pnpm
  npmPackages:
    @qwik.dev/core: ^2.0.0-rc.0 => 2.0.0-rc.0 
    @qwik.dev/router: ^2.0.0-rc.0 => 2.0.0-rc.0 
    typescript: 5.9.3 => 5.9.3 
    vite: 8.1.5 => 8.1.5

Additional Information

No response

Activity

  1. added 3 commits that reference this issue on Oct 5, 2026
    4b011dd
    95ac0f4
    30ed653
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions