Skip to content

RFC: unwrapFragment to flatten nested Fragment nodes #787

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

baozjj
Copy link

@baozjj baozjj commented Jul 13, 2025

Summary

This RFC proposes introducing an internal utility function unwrapFragment in @vue/runtime-core, which recursively flattens Fragment nodes from a VNode array. This solves a practical problem where multiple nested Fragment layers—introduced by slot forwarding across components—make it difficult to inspect or reason about slot content.

Example Use Case

const rawContent = slots.default?.()
const children = unwrapFragment(rawContent)
console.log(children.length) // now reflects real slot content

This is especially useful in component libraries like TDesign, where internal logic depends on the slot node length or type—for example, to determine whether to show a "collapse/expand" toggle based on number of child nodes. In nested usage, the slots are wrapped in an extra Fragment, leading to incorrect logic.

This utility simplifies advanced component use cases without altering Vue’s core slot behavior or introducing new user-facing API surface.


Links


Important: Do NOT comment on this PR. Please use the discussion thread linked above to provide feedback, as it provides branched discussions that are easier to follow. This also makes the edit history of the PR clearer.

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