Vue 3 开发中遇到的报错(2)

一、响应式系统相关

  1. Cannot read property 'value' of null
    场景 :组合式 API 中访问 ref 的时机不当
    解决

    vue 复制代码
    <script setup>
    import { ref, onMounted } from 'vue'
    const myRef = ref(null)
    
    onMounted(() => {
      console.log(myRef.value) // 确保在挂载后访问
    })
    </script>
    <template>
      <div ref="myRef"></div>
    </template>
  2. 响应式对象解构丢失响应性
    隐秘点 :使用 ES6 解构 reactive 对象
    正确做法

    javascript 复制代码
    import { reactive, toRefs } from 'vue'
    
    const state = reactive({ count: 0 })
    // 错误:const { count } = state 
    const { count } = toRefs(state) // 保持响应性

二、组合式 API 陷阱

  1. provide/inject 未生效
    常见原因 :未在顶层调用 provide

    javascript 复制代码
    // 错误:在条件语句中调用
    if (condition) {
      provide('key', value) // 将失效
    }
  2. 异步组件 Suspense 报错
    隐秘错误:未处理异步边界

    vue 复制代码
    <Suspense>
      <template #default>
        <AsyncComponent />
      </template>
      <template #fallback>
        Loading... <!-- 必须提供降级内容 -->
      </template>
    </Suspense>

三、模板编译问题

  1. v-model 参数不匹配
    Vue 3 变更:需显式指定参数

    vue 复制代码
    <!-- 错误:<MyComponent v-model="value" /> -->
    <MyComponent v-model:title="value" /> <!-- 正确 -->
  2. <script setup> 的变量未暴露
    隐秘点 :使用 $refs 访问子组件方法

    vue 复制代码
    <!-- 子组件 -->
    <script setup>
    defineExpose({ publicMethod: () => {} }) // 必须显式暴露
    </script>
    
    <!-- 父组件 -->
    <Child ref="childRef" />
    <script setup>
    const childRef = ref(null)
    childRef.value?.publicMethod() // 安全访问
    </script>

四、状态管理相关

  1. Pinia 的 storeToRefs 误用
    错误现象:修改属性不触发更新

    javascript 复制代码
    import { storeToRefs } from 'pinia'
    
    const store = useStore()
    // 错误:const { count } = store
    const { count } = storeToRefs(store) // 保持响应性
    
    count.value++ // 正确触发更新
  2. Vuex 4 的 useStore 报错
    原因:未在根组件注入 store

    js 复制代码
    // main.js
    import { createApp } from 'vue'
    import store from './store'
    createApp(App).use(store).mount('#app')

五、TypeScript 特有错误

  1. 模板类型推断失败
    解决:使用 Volar 插件 + 类型声明

    vue 复制代码
    <script setup lang="ts">
    defineProps<{ 
      title: string   // 基于 TS 的类型声明
    }>()
    </script>
  2. 泛型组件类型丢失
    方案 :使用 h 函数渲染

    ts 复制代码
    import { h } from 'vue'
    const GenericComponent = <T>(props: { data: T[] }) => 
      h('div', props.data.map(d => d.toString()))

六、构建工具相关

  1. process.env 未定义
    Vite 方案

    js 复制代码
    import.meta.env.VITE_API_KEY // 需使用 VITE_ 前缀
  2. 动态导入组件报错
    正确写法

    vue 复制代码
    <script setup>
    import { defineAsyncComponent } from 'vue'
    const AsyncComp = defineAsyncComponent(() =>
      import('./components/AsyncComp.vue')
    )
    </script>
相关推荐
ZengLiangYi3 分钟前
sql.js WASM 深度解析
javascript·数据库·后端
Hommy8810 分钟前
【剪映小助手】音频处理接口
前端·音视频·剪映小助手·视频剪辑自动化
KaMeidebaby15 分钟前
卡梅德生物技术快报|蛋白翻译后修饰:YAP/TAZ 分子调控机制与靶向干预技术
前端·人工智能·物联网·百度·新浪微博
JustHappy20 分钟前
古法编程秘籍(三):为什么需要函数?因为程序员讨厌重复劳动
前端·javascript·后端
一 乐21 分钟前
人口老龄化社区服务与管理平台|基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·人口老龄化社区服务与管理平台
weixin_3975740922 分钟前
AgentRAG与ReAct推理链:从检索增强到推理增强
前端·react.js·前端框架
想要狠赚笔的小燕33 分钟前
vue项目的入口文件是什么 main.js还是index.html,他俩有啥区别
前端·javascript
Jiude35 分钟前
AI面对真机调试也束手无策?我将方法论形成了一套SKILL 🛠️🤖
前端·后端·测试
之歆1 小时前
Day02_ES6+ 核心特性深度解析:现代 JavaScript 开发的基石
前端·javascript·es6
问心无愧05131 小时前
ctf show web入门71
android·前端·笔记