關(guān)鍵字:獲取不到ref,異步組件周偎,$refs
記一次異步組件導(dǎo)致的bug
目前這個(gè)bug只在打包環(huán)境出現(xiàn),本地環(huán)境不出現(xiàn),暫時(shí)不清楚什么原因
先解釋一下什么是異步組件蛮穿,其實(shí)和vue-router的組件懶加載寫法一樣,只是應(yīng)用在局部注冊(cè)中而已
export default {
components: {
MdChart: () => import('@/components/子組件')
},
}
好處的話就是懶加載的好處毁渗,可以微略提高一些腳本速度践磅。
bug出現(xiàn)
由于我寫的子組件需要調(diào)用組件內(nèi)的一些methods來進(jìn)行初始化,因此需要獲取子組件的dom灸异。和平常一樣在mounted獲取ref然后調(diào)用子組件的方法府适, 本地開發(fā)環(huán)境是沒有問題的。
然后上線測試環(huán)境肺樟,怎么子組件沒了檐春,原來是$refs獲取不到,子組件沒辦法初始化么伯。
定位
其實(shí)我找了半天疟暖,一直把關(guān)注點(diǎn)放在ref的獲取上,無論怎么調(diào)整田柔,加上$nextTick和settimeout都沒有用誓篱,本地不重現(xiàn)線上重現(xiàn),最后還是聚焦在子組件上凯楔,發(fā)現(xiàn)這種引入的方式會(huì)導(dǎo)致mounted之后也獲取不到子組件的dom窜骄,切換回官方的就好了
解決
子組件傳出this代替refs獲取
使用局部注冊(cè)的方式
總結(jié)
問題找到了,平時(shí)還是推薦使用官方推薦的局部注冊(cè)的方式吧摆屯,否則需要關(guān)注其他注冊(cè)方式子組件的生命周期是否正確邻遏。