Skip to content

fix(react): render streamed repeat items before completion - #447

Open
mxmzb wants to merge 1 commit into
vercel-labs:mainfrom
mxmzb:fix/react-streamed-array-state
Open

mxmzb wants to merge 1 commit into
vercel-labs:mainfrom
mxmzb:fix/react-streamed-array-state

Conversation

@mxmzb

@mxmzb mxmzb commented Nov 1, 2026

Copy link
Copy Markdown

When useChatUI receives patches that append to an existing state array, a repeat list can stay empty until the stream ends and loading changes. The records have already arrived, but the hook's shallow state copies share the array with the mutable patch accumulator. StateProvider sees the same array reference and does not notify its subscribers.

Capture a detached state snapshot before queuing each React message update, and detach the final callback's state as well. This keeps previously published state from changing underneath React. The core patch API and element-tree copying remain unchanged. The fix adds a deep copy of the streamed JSON state per patch.

The regression uses a controlled ReadableStream with useChatUI, JSONUIProvider, and Renderer. While the stream stays open, it verifies indexed and /- appends, a nested field replacement, removal, and preservation of earlier state snapshots. It fails on the first append without the fix ([] instead of ["First"]) and passes with it.

Validation:

  • pnpm test: 1,260 tests passed.
  • pnpm type-check, pnpm lint, all package builds, version synchronization, and formatting checks passed.
  • Applied the equivalent patch to @json-render/react@0.21.3 in a browser consumer: twelve repeated records are visible while the replay stream is still open; without the patch, zero are visible until it closes.
  • Additional pnpm --filter @json-render/react typecheck fails on existing errors in hooks.test.ts and streaming-render.test.tsx. The unmodified baseline and this branch produce identical output. The root type-check command does not run that package's differently named typecheck script.

@vercel

vercel Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

@mxmzb is attempting to deploy a commit to the Vercel Labs Team on Vercel.

A member of the Team first needs to authorize it.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant