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, 或节点未设置响应属性为显示时,则子元素也不会被渲染(这点比较容易忽略)

欢迎各位大佬指点


posted @   清风-  阅读(1052)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示