vue3在mounted中获取元素null

在Vue3的应用开发中,开发者可能遇到在mounted钩子中尝试获取元素但返回null的情况。这通常是由于组件渲染的异步性质导致的。本文将探讨这个问题的原因,并提供解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<template>
     <div id="dynastyPie" ref="dynastyPie" class="testname">ajfldkjflk</div>
</template>
<script>
import {CanvasRenderer} from "echarts/renderers";
import * as echarts from 'echarts/core';
import { LegendComponent } from 'echarts/components';
import { ToolboxComponent } from 'echarts/components';

import axios from 'axios';
import { onMounted, ref } from 'vue';
// import { onMounted, ref } from 'vue';
export default {
    name:"dynastyPie",
       setup(){     
        let  dynastyPieOption="";
        let mydata=[];
        let dynastyPie=ref();
             console.log("dom准备好了-mount--ref");
            console.log(dynastyPie);
            console.log(dynastyPie.value);
        return{
            dynastyPieOption,
            mydata,
            dynastyPieCharts,
            dynastyPieInit,
            dynastyPie
                       
        },
        onMounted(()=>{
             let charDom=document.getElementById("dynastyPie")
            console.log("dom准备好了-mount");
            console.log(charDom);
            
        axios({
                method: 'get',
                url: 'http://localhost:8090/finddynasty',
                }).then((response)=> {
                    console.log(response.data);
                mydata=response.data;
                    console.log(mydata);
                    dynastyPieInit();
                    dynastyPieCharts()
                    
               
                }).catch(function (error) {
                    console.log(error);
                });
        });
        
 
    function dynastyPieInit(){
            dynastyPieOption = {
                legend: {
                    top: 'bottom'
                },
                toolbox: {
                    show: true,
                    feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    restore: { show: true },
                    saveAsImage: { show: true }
                    }
                },
                series: [
                    {
                    name: 'Nightingale Chart',
                    type: 'pie',
                    radius: [50, 250],
                    center: ['50%', '50%'],
                    roseType: 'area',
                    itemStyle: {
                        borderRadius: 8
                    },
                    data: mydata
                    }
                ]
                }
        }
        function dynastyPieCharts(){
            let charDom=document.getElementById("dynastyPie")
            console.log("dom准备好了");
            console.log(charDom);
            // let dynastyPie=ref(null);
            // let myChart=echarts.init(dynastyPie);
            let myChart=echarts.init(charDom);
            echarts.use(CanvasRenderer);
            echarts.use([LegendComponent]);
            echarts.use([ToolboxComponent]);
            myChart.setOption(dynastyPieOption);
            
        }
           }
}
</script>

缩减版

onMounted(()=>{
             let charDom=document.getElementById("dynastyPie")
            console.log("dom准备好了-mount");
            console.log(charDom);
       
        });
        

输出结果
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值