在 vue 模板中直接拼接 html 字符串并用 `v-html` 渲染,无法绑定响应式事件;真正可靠的方式是使用 render functions(或 jsx),通过 `h()` 函数创建可交互的虚拟节点。
在 Vue 开发中,常有需求根据参数动态生成具有特定行为(如点击事件)的 HTML 元素。初学者容易尝试在模板中调用方法返回 HTML 字符串,例如:
{{ testFunction('a', 'b', 'c') }}
⚠️ 这种写法不会生效:
✅ 正确解法:使用 Render Functions(组合式 API 中的 setup() 返回函数 + h())
Render Functions 是 Vue 的底层渲染机制,允许你以编程方式创建响应式、可交互的 VNode。它绕过模板编译限制,直接控制虚拟 DOM 结构与行为:
import { h } from 'vue'
export default {
props: ['param1', 'param2', 'param3'],
setup(props) {
const handleClick = () => {
alert(`Clicked with: ${props.param1}, ${props.param2}, ${props.param3}`)
}
return () => h('button', {
class: 'custom-btn',
onClick: handleClick,
type: 'button'
}, 'Click Me!')
}
}该写法优势显著:
? 补充说明:
总之,当 HTML 结构与交互逻辑需动态组合时,Render Functions 不是“高级技巧”,而是 Vue 官方推荐的标准解决方案——它让动态性与响应式完美共存。