You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue2.7+Vite3.0中Setup语法糖JSX事件绑定失效如何解决?

问题解决方法

1. 修复事件绑定的即时执行问题

你当前代码里的onClick={buttonDetail(row)}是立即执行函数,页面加载时就会触发buttonDetail,点击按钮时反而没有绑定事件。正确的写法是传递一个函数引用,点击时再调用:

render: (row) => {
  return (
    <span>
      <el-button type="text" onClick={() => buttonDetail(row)}>
        查看详情
      </el-button>
    </span>
  );
},

2. 确保自定义表格组件的JSX渲染上下文正确

Vue2.7的<script setup>中,JSX的渲染默认不会自动绑定组件的上下文。如果你的base-table组件是通过遍历tableConfig,用h函数或JSX渲染列内容,需要确保渲染时传入当前组件的上下文:

自定义base-table组件中的处理示例

在base-table的渲染逻辑中,当调用配置项的render方法时,需要传递组件的上下文(可以通过getCurrentInstance()获取):

// base-table 组件的 setup 中
import { getCurrentInstance, h } from 'vue'

const instance = getCurrentInstance()

// 遍历 tableConfig 渲染列时
columns.map(col => {
  if (col.render) {
    // 调用 render 时传入上下文,确保事件能正确绑定
    return h('td', null, col.render(row, instance.proxy))
  }
})

3. 关于$listeners的说明

Vue2.7已经将$listeners合并到$attrs中,不再单独暴露。如果你需要在自定义组件中处理父组件传递的事件,可以通过useAttrs()获取:

import { useAttrs } from 'vue'

const attrs = useAttrs()
// attrs 中包含了原 $listeners 的所有事件

内容的提问来源于stack exchange,提问作者Oscar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:50:35