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>
相关推荐
2401_894915533 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
rockey6277 小时前
C#脚本引擎之AScript与Jurassic、Jint对比
javascript·c#·.net·js·script·动态脚本
Profile排查笔记8 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
lzhdim8 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
denggun123458 小时前
yield
前端·数据库·python
前端snow8 小时前
ai agent -- prompt汇总
前端
muddjsv10 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化
deli00700711 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
guanguan0_011 小时前
PageProxy:页面维度接口地图 + 一键场景切换
前端·ai编程·请求代理·proxy工具
liangshanbo121511 小时前
虚拟列表深度面试题整理
java·开发语言·前端