Fragment refs

Fragment ref

Apply group DOM operations to sibling elements without adding a wrapper.

···
html
<div class="scene"><div class="tree">&lt;Fragment ref&gt; <span>no wrapper DOM</span></div><div class="siblings"><div id="one">item A</div><div id="two">item B</div><div id="three">item C</div></div><div class="focus" id="focus">focus() → item A</div></div>
css
.scene{width:min(94vw,800px);height:min(86vh,320px);position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;border:1px solid var(--line);border-radius:14px;background:var(--surface);padding:clamp(9px,2.4vmin,20px);font:500 clamp(15px,4vmin,18px)/1.3 var(--font-sans,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif)}.scene b,.scene strong{font-weight:700}.label{color:var(--muted)}.code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.pill{border:1px solid var(--line);border-radius:8px;padding:.4em .65em;background:var(--bg)}.active{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 10%,var(--surface))!important}.tree{font:700 clamp(15px,4vmin,18px) ui-monospace,monospace;color:var(--accent)}.tree span{float:right;color:var(--muted);font-size:.8em}.siblings{display:flex;gap:7px;margin:clamp(25px,9vmin,56px) 0}.siblings div{flex:1;text-align:center;border:1px solid var(--line);border-radius:7px;padding:clamp(9px,4vmin,24px) 2px}.siblings div.on{outline:3px solid var(--accent);outline-offset:2px;background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.focus{text-align:center;color:var(--muted);font-family:ui-monospace,monospace}
js
const ids=["one","two","three"],names=["A","B","C"];let n=0;function tick(){const s=n%3;ids.forEach((id,i)=>document.getElementById(id).classList.toggle("on",i===s));document.getElementById("focus").textContent="focus() → item "+names[s];n++}tick();setInterval(tick,850)

React 19.3 Fragment refs expose a FragmentInstance with selected DOM methods over its children. You can move focus, attach events, or observe visibility as a group.

The demo focuses three sibling items in sequence while showing that no wrapper node is introduced. Prefer declarative rendering for normal data flow and use refs only for needed DOM behavior.

When to use

Use it when a wrapper would disturb layout but sibling nodes need grouped focus or observation.

Open as page ↗