用途:指导在 React 应用中用浏览器原生 document.startViewTransition 实现界面状态间的平滑动画。用 <ViewTransition> 声明动画对象,用 startTransition / useDeferredValue / Suspense 触发,用 CSS 类控制动画方式;不支持的浏览器会优雅跳过动画。
主要能力:<ViewTransition> 组件(React 自动分配 view-transition-name 并调用 startViewTransition,不要自行调用);触发类型 enter、exit、update、share;通过 default、enter、exit、share 属性传 "auto"、"none"、类名或按 transition type 映射的对象;用 addTransitionType 标记过渡类型以按上下文选择动画;共享元素 morph(两个 VT 同名,一个卸载一个挂载);列表身份、Suspense 揭示、路由切换等模式。
使用方式:仅 startTransition、useDeferredValue、Suspense 会激活 VT,普通 setState 不会。VT 需出现在任何 DOM 节点之前才能激活 enter/exit。建议广泛使用 default="none",只显式开启需要的触发。共享元素名需唯一,同一时刻只能挂载一个同名 VT。router.back() 与浏览器前进后退按钮不触发视图过渡,应改用 router.push() 显式 URL。
适用场景:层级导航(列表→详情)用类型键控的方向滑动;横向导航(标签切换)用淡入淡出;Suspense 揭示用字符串属性;后台刷新用 default="none"。
限制:Next.js App Router 已内置 React canary,无需安装 react@canary;非 Next.js 需安装 react@canary react-dom@canary。浏览器支持 Chromium 111+、Firefox 144+、Safari 18.2+。父 VT 退出时嵌套 VT 不触发自身 enter/exit。需在全局样式表加入减少动态效果的 CSS。具体 CSS 配方与实现步骤见资料中的 references 文件,此处未提供完整内容。