Vue Cannot read properties of null (reading '$el') 错误,找出真凶了
Cannot read properties of null (reading '$el')
菜鸟,在vue3 开发遇到的问题,百思不得其解,为什么会为null, 先上代码大概的代码结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | < template > < el-Dialog v-model="isLoading"> < el-table ref="tableRef"> < el-table-column prop="name"/> </ el-table > </ el-dialog > </ template > < script steup> //省略...import const isLoading= ref(false); const tableRef = ref(null); const openDialog = asnyc (row: any) =>{ //省略...加载数据,其他处理 consolog.log(tableRef.value); //此处会输出null const elment = tableRef.value.$el; isLoading.value = true; }; </ script > |
调试了很久,怎么会为null, 明明已经检查了tableRef已经声明并正确设置ref,初始化都没问题。如果说DOM没有渲染完毕,尝试在
onMounted里面输出正常是可以,因为它已经渲染完了,结果还是null, 上网找到一种方式说await nextTick()可以等待DOM渲染完毕,也是不行。
最终调度发现是由于这里的影响,由于上级的el-dialog 未设置为显示(渲染),所以子节点里面都不会被渲染。
1 | isLoading.value = true; |
修正后:, 这行代码显示isLoading.value = true;放在它前面即可。
1 2 3 4 5 6 7 8 9 | const openDialog = asnyc (row: any) =>{ //省略...加载数据,其他处理 isLoading.value = true ; consolog.log(tableRef.value); //此处会输出ok const elment = tableRef.value.$el; }; </script> |
经过这次知道:
1.Dom元素未被渲染时,ref.是无法取得value的
2.onMounted 执行完后,通常都是渲染完后
3.await nextTick()可以选个渲染完毕
4.当你节点设置到v-if, 或节点未设置响应属性为显示时,则子元素也不会被渲染(这点比较容易忽略)
欢迎各位大佬指点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现