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

Vue.js拆分模块报错:渲染时message属性未定义如何解决?

解决Vue3拆分setup到外部文件后"message未定义"的问题

我刚接触Vue.js,用VS Code开发,从Vue官网复制的单文件Hello World示例能正常运行:

<script type="module">
import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

createApp({
  setup() {
    const message = ref('Hello World!')
    return {
      message
    }
  }
}).mount('#app')
</script>

<div id="app">
  <h1>{{ message }}</h1>
</div>

但拆分代码到多文件后,浏览器出现警告:

[Vue warn]: Property "message" was accessed during render but is not defined on instance. at

拆分后的主文件代码:

<script type="module">
   import { createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
   import MySetup from './setup.js'

  createApp(MySetup).mount('#app')
</script>

<div id="app">
  <h1>{{ message }}</h1>
</div>

setup.js原代码:

export default {
  setup() {
    const message = ref('Hello World!')
    return {
      message
    }
  }
}

问题原因

ES模块拥有独立的作用域,每个模块必须自行导入所需的依赖项,主文件中导入的ref不会自动共享给setup.js模块。在setup.js中直接使用ref会导致该函数未定义,无法正确创建响应式的message变量,最终组件实例上没有这个属性,渲染时触发警告。

解决方案

修改setup.js,在文件顶部导入ref:

import { ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'

export default {
  setup() {
    const message = ref('Hello World!')
    return {
      message
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:05:22