vue 3 中可通过 setup + render 实现函数式组件,无实例、无响应式、纯 props→vnode 映射,提升静态列表渲染效率;需精简 props、父级提供 key、缓存 class/style、显式透传插槽,并搭配 shallowref 与虚拟滚动。

Vue 单文件组件(SFC)本身不直接支持 <template functional></template> 语法(该写法在 Vue 2 中存在,Vue 3 已移除),但可以通过组合式 API + 渲染函数(render 选项)实现真正的函数式组件行为——即无实例、无响应式代理、无生命周期、纯 props → VNode 的映射。这种写法能显著提升列表项等静态/低交互场景的渲染效率。
用 setup + render 替代 template
在 .vue 文件中,舍弃 <template></template>,改用 setup() 返回 render 函数:
- 不声明
data、methods或watch,也不使用this -
setup(props, { slots, attrs })接收参数,直接调用h()构造 VNode - 整个组件不创建 Vue 实例,跳过响应式初始化和生命周期开销
关键细节必须到位
否则无法真正提效,甚至引发重绘或 key 失效:

