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

Vue3中在.vue文件内使用JSX语法报错,已安装相关插件仍无法解决该怎么办?

解决Vue文件中使用JSX语法时的"Invalid JS Syntax"错误

这个问题我之前也碰到过,核心原因是Vue单文件组件的<script>标签默认只会解析普通JS/TS代码,不会识别JSX语法——哪怕你已经安装了JSX相关插件,也得明确告诉构建工具要处理这块代码。给你两个可行的解决方案:

方案1:给<script>标签添加lang="jsx"属性

这是最直接的解决方式,通过指定脚本语言为JSX,让Vite自动调用@vitejs/plugin-vue-jsx插件解析里面的JSX语法。

修改后的完整代码如下:

<template>
  <RenderComponent :data="hello" />
</template>
<script lang="jsx">
import { ref, computed, defineComponent } from 'vue'
export default defineComponent({
  name: 'CustomComponent',
  setup() {
    const name = ref('Lily')
    const hello = computed(() => {
      // 注意:JSX属于JS上下文,ref变量必须手动访问.value
      return <span>Hello {name.value}!</span>;
    })
    return { hello }
  }
})
</script>

关键注意点:

  • 如果你使用TypeScript,把lang="jsx"换成lang="tsx"即可。
  • 在JSX中,ref变量不会像Vue模板那样自动解包,必须手动添加.value才能访问其值,否则会输出[Object Object]。

方案2:将JSX逻辑抽离到单独的.jsx/.tsx文件中

如果不想在Vue单文件组件里混用JSX,也可以把包含JSX的逻辑抽成独立的JSX文件,再在Vue组件中导入使用。

比如创建HelloRender.jsx:

import { ref, computed } from 'vue'

export function useHelloRender() {
  const name = ref('Lily')
  const hello = computed(() => {
    return <span>Hello {name.value}!</span>
  })
  return { hello }
}

然后在Hello.vue中导入并使用:

<template>
  <RenderComponent :data="hello" />
</template>
<script>
import { defineComponent } from 'vue'
import { useHelloRender } from './HelloRender.jsx'

export default defineComponent({
  name: 'CustomComponent',
  setup() {
    const { hello } = useHelloRender()
    return { hello }
  }
})
</script>

两种方案都能解决你的语法解析错误问题,推荐优先用方案1,更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 03:49:10