当前位置: 首页 > news >正文

Vue 开发踩坑:Cannot read properties of null

Vue 开发踩坑:Cannot read properties of null —— 从爆红到根治的 3 分钟急救手册


正文目录

  1. 报错含义:null 从何而来?
  2. 4 大高频翻车现场 & 修复代码
  3. 万能兜底工具:可选链与默认值
  4. 预防 checklist(不再踩坑)
  5. 一句话总结

一、报错含义:null 从何而来?

当你在控制台看到:

Cannot read properties of null (reading 'xxx')

Vue 在告诉你:
「你试图读取null.xxx,但 null 没有属性。」
在 Vue 中,99% 是「异步数据 / 初始状态 / DOM 未挂载」三选一。


二、4 大高频翻车现场 & 修复代码

① 异步数据初始为 null

<script setup> const user = ref(null); // 初始 null onMounted(async () => { user.value = await fetchUser(); // 异步回来 }); </script> <template> <p>{{ user.name }}</p> <!-- ❌ 首屏 null --> </template>

修复:初始空对象 + 可选链

constuser=ref({});// 或 { name: '' }// 模板<p>{{user?.name??'加载中...'}}</p>

② 嵌套链式访问中途 null

<template> <p>{{ article.author.bio }}</p> <!-- ❌ author 为 null --> </template>

修复:可选链一路到底

<p>{{ article?.author?.bio ?? '暂无简介' }}</p>

③ DOM 未挂载就操作 ref

<script setup> const canvas = ref(null); // 初始 null onMounted(() => { canvas.value.getContext('2d'); // ✅ 这里安全 }); // ❌ 提前调用 canvas.value.getContext('2d'); // 报错

修复:只在生命周期后使用

onMounted(()=>{canvas.value?.getContext('2d');// 可选链保险});

④ 数组/对象解构空值

const{name}=user.value;// ❌ user.value 为 null

修复:默认值解构

const{name='Guest'}=user.value??{};

三、万能兜底工具:可选链与默认值

场景工具示例
模板可选链?.{{ obj?.a?.b ?? '' }}
JS 逻辑空合并??const val = obj ?? {}
深路径lodash getget(obj, 'a.b.c', '')
响应式新增Vue.setVue.set(obj, 'newProp', val)

四、预防 checklist

  • 异步数据初始化为空对象/数组而非null
  • 模板层统一用?.+??兜底
  • 生命周期内再操作 DOM / 异步数据
  • 解构时给默认值const { a = '' } = obj ?? {}
  • 大数据路径用lodash/get或可选链

五、一句话总结

「Cannot read properties of null」= 对象/数组/DOM 还没准备好就被读取。
用「可选链 + 默认值 + 生命周期」三件套,让 null 永远挡在读取之前,报错瞬间消失!


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

📚 《Vue.js 3企业级项目开发实战(微课视频版》

http://www.cnnetsun.cn/news/20414.html

相关文章:

  • 终极指南:macOS iSCSI Initiator快速连接远程存储
  • 在.NET Framework 4.7.2 使用Microsoft.Practices.EnterpriseLibrary.Data配置出错
  • 【论文自动阅读】HIERARCHICAL MIXTURE-OF-EXPERTS FOR GENERALIST VISION-LANGUAGE-ACTION POLICIES
  • FastDepth:嵌入式系统上的快速单目深度估计
  • Solidity 中的using for详解
  • GPT-5.2 的数据基石、原生多模态与隐私承诺的深度考量
  • 开源代码智能体SWE-Dev-9B崛起:逼近GPT-4o性能,90%工程师效率革命加速
  • Wasmer WebAssembly运行时终极指南:从零到实战部署
  • 2025年推荐一些程序员常逛的开发者社区
  • ExplorerPatcher深度解析:重塑Windows界面体验的终极方案
  • SketchUp STL插件实战指南:打通3D打印的最后一公里
  • 基于VUE技术的健康监测可视化系统设计与实现开题报告
  • 基于VUE技术的健康监测可视化系统设计与实现任务书
  • Smithbox游戏修改工具:从玩家痛点出发的7大深度解决方案
  • Qt + VS2017 编译缺少库,在对方设备无法运行,推荐几种做法。
  • 窗口管理大师:WindowResizer完整使用指南
  • 20亿参数撬动工业质检革命:Isaac-0.1开启边缘智能新纪元
  • 基于web的超市管理系统开题报告
  • Driver.js 1.x升级攻略:告别旧版,拥抱全新API设计
  • Laudspeaker:终极开源客户参与平台完全指南
  • 20、Snort Options and iptables Packet Filtering
  • 自主之路:中国科技国产化的战略纵深与实践探索
  • 22、深入了解 fwsnort:规则部署、选项及攻击检测实践
  • springboot基于vue的高校师资管理_kn455e4x
  • 不只是LoRA:Llama-Factory全面覆盖主流高效微调方法
  • fflate终极指南:掌握JavaScript高性能压缩解压技术
  • 26、Linux系统桌面环境配置与资源管理指南
  • C++ Primer 中文版高清资源 - 带详细目录的完整学习指南
  • Tabby终极使用手册:从零到精通的完整指南
  • Milkdown终极指南:10分钟快速上手插件化Markdown编辑器