跨境電商千萬別做亞馬遜seo排名優(yōu)化工具推薦
看到這篇文章算你運(yùn)氣好!因?yàn)橹挥形也拍芙o你答案!看到就賺到,這就是緣分
因?yàn)関ue3遷移nuxt3是一個(gè)非常困難和痛苦的過程,中間會(huì)有各種報(bào)錯(cuò),各種不兼容,各種亂七八糟但是你又找不到答案的問題。
而且你一定會(huì)遇到這個(gè)onMounted不執(zhí)行的問題!
現(xiàn)象如下:
上面可以看到無論瀏覽器console還是cmd命令行的輸出都沒有執(zhí)行onMounted中的語句。
onMounted不執(zhí)行是一個(gè)非常嚴(yán)重的問題,這意味著,你的異步請(qǐng)求都沒法在頁面掛載之前成功發(fā)起,那么html就會(huì)因?yàn)闆]有ajax數(shù)據(jù)而沒法渲染!
?我在nuxt3的github提過一個(gè)問怎么解決這個(gè)issue的問題,并且提供了復(fù)現(xiàn)問題的鏈接,結(jié)果nuxt3的開源作者說:他們不看實(shí)際項(xiàng)目中的這種復(fù)現(xiàn),他們只看最小環(huán)境中是否存在這種問題,讓我在最小環(huán)境復(fù)現(xiàn)這個(gè)問題。如果最小環(huán)境中沒有問題,就不是框架的問題。
雖然他們說的有點(diǎn)道理,但我還是忍不住要噴他們:誰會(huì)只在最小環(huán)境開發(fā)?!就是因?yàn)檎鎸?shí)環(huán)境中的各種因素的互相影響,才能考驗(yàn)框架的健壯性!用最小環(huán)境來復(fù)現(xiàn)問題做評(píng)判,顯示是片面和缺乏說法力的,這是一種偷懶行為! 要是都用最小環(huán)境來復(fù)現(xiàn),還要他們這些人開發(fā)個(gè)毛的框架,直接說evething is ok,no any bug就得了。
這是扯了句題外話,我經(jīng)過了大概一天的測(cè)試和思考,一直沒有找到原因。
開始吐槽nuxt的垃圾和難用,但是內(nèi)心的不服輸仍然推動(dòng)著我必須解決這個(gè)問題!
在今天早上出去鍛煉吸收了天地靈氣之后,回到家里,頭腦一片清凈,在某個(gè)靈感涌現(xiàn)的瞬間找到了一點(diǎn)線索(這本是不起眼的一個(gè)地方):
import { Player, VHeader, VTab } from "@/components";
export default defineComponent({
? name: "App",
? components: {
? ? VHeader,
? ? VTab,
? ? Player,
? },
在app.vue里我手動(dòng)導(dǎo)入了component組件,當(dāng)然這是一個(gè)非常正常的操作,我是vue3遷移到nuxt3, nuxt3不是號(hào)稱強(qiáng)大兼容性嗎,我如果要改大量代碼才能遷移,那我還用個(gè)屁的nuxt3啊!
但是靈感為什么是靈感! 那是因?yàn)槟愕谝恢庇X在告訴你正確的方向在哪里!
因?yàn)檎覇栴}的本質(zhì)是: 找到跟正常對(duì)象相比較所不同的地方!
因?yàn)檫@種不同的地方往往不起眼,微不可察,但是就是往往這一點(diǎn)點(diǎn)差異造成了問題!
果然,我此時(shí)的直覺告訴我:把這個(gè)手動(dòng)引入組件去掉試試!
然后去掉手動(dòng)引入組件以后,onMounted鉤子終于執(zhí)行了!
換句話說: 正是因?yàn)槭謩?dòng)引入組件,導(dǎo)致了vue3生命周期鉤子onMounted不執(zhí)行!
事實(shí)上不僅是onMounted不執(zhí)行,而是vue3所有的生命周期鉤子都不能執(zhí)行!
為什么會(huì)這樣:我突然想起nuxt3設(shè)計(jì)時(shí)就是不需要開發(fā)者手動(dòng)導(dǎo)入組件的,直接使用組件名就可以用了。
但是沒有想到:如果手動(dòng)引入組件,會(huì)產(chǎn)生如此嚴(yán)重的后果!
那我只能說nuxt3框架的兼容性真的太垃圾了!作為vue3遷移nuxt3, 大家都只想盡量少改代碼,誰會(huì)想到要修改組件引入方式。而且nuxt3的規(guī)矩太多了,跟vue3根本就是兩樣?xùn)|西,新的條條框框一大堆,寫的又不清楚,你很難知道所有規(guī)則,要不是為了ssr服務(wù)端渲染,鬼才用nuxt3!
好了,我寫完了,你應(yīng)該感謝你有運(yùn)氣看到這篇文章,否則你可能這輩子都解決不了這個(gè)問題。