Vue升級帶來的elementui沖突警告:Invalid prop: custom validator check failed for prop “type“.的解決方案
一、錯誤情景描述
1、報錯情景和信息
在頁面渲染的時候,控制臺彈出大量警告,嚴重影響控制臺的信息獲取功能,但是頁面基本能正常顯示。
警告內容有兩種:
①:
Invalid prop: custom validator check failed for prop "type".
②:
Invalid prop: validation failed for prop "type". Expected one of ["success", "info", "warning", "danger", ""], got value "primary".
2、解決方案
直面問題,這個警告就是說類型驗證失敗,類型應該是"success", "info", "warning", "danger", ""的其中之一,但是實際獲取的類型是“primary”。
再加上警告第三行說明了是tag標簽的type不對,更有助于定位錯誤位置。
那就找到對應的位置,將tag類型修改為上述五種之一即可。
<el-form-item label="Status: "> <el-tag :type=" getStatus(instance.status) == 'initialized' || getStatus(instance.status) == 'started' ? '' : getStatus(instance.status) " disable-transitions > {{ getStatus(instance.status) }} </el-tag> </el-form-item>
二、深度思考——為什么會警告?為什么頁面能顯示?
首先,我是在當前項目中整合了以前寫的內容,原則上不應該會有錯誤或警告,為什么會出現(xiàn)警告呢?
其次,如果我的type類型是錯誤的,按照elementui的習慣,要么直接報錯崩潰,要么按照默認類型顯示,但是實際顯示是藍色tag,熟悉elementui的人都知道,藍色樣式一般就是對應的primary的類型,難道說明我設置的type=“primary”生效了,那為什么又會發(fā)出警告呢?
三、vue與elementui在不同版本下的細微變化
產生上述疑問后,我突然意識到一個問題,我當前的項目是基于Vue3+Vite開發(fā)的,之前的項目是基于Vue2+Webpack開發(fā)的,Vue3匹配的框架庫是elementui plus,Vue2匹配的框架庫是elementui。可能是elementui與elementui plus之間有細微的改動?
查閱elementui官網文檔,發(fā)現(xiàn):elementui中tag的type有五種:"success", "info", "warning", "danger", "",默認/缺省值為藍色tag。
再查閱一下elementui plus的官方文檔,發(fā)現(xiàn)已經不存在“”這個類型了,而是直接變成了“primary”。tag的type有:"success", "info", "warning", "danger", "primary",并且能通過color值自定義背景顏色。
到這里就破案了,elementui存在兩個tag的type版本,舊版本中空值和新版中的“primary”效果一致,所以這里出現(xiàn)了一個警告。tpye的值只要不是"success", "info", "warning", "danger", ""這五者之一,就會變成默認的藍色tag,“primary”并沒有生效,這只是一個巧合,開始驗證,我將type的值改為“123”(確定是一個毫無意義的值):
<el-form-item label="Status: "> <el-tag :type=" getStatus(instance?.status) == 'initialized' || getStatus(instance?.status) == 'started' ? '123' : getStatus(instance?.status) " disable-transitions > {{ getStatus(instance?.status) }} </el-tag> </el-form-item>
頁面依然顯示為藍色的tag,并且報錯一樣。驗證與猜想一致。
四、仍然存在的一個疑問
我確定我引入的是elementui plus,我這個項目根本就沒有引入elementui,而且Vue3項目中通過defineCompatSource等方式引入Vue2的組件,但這種兼容性是通過橋接實現(xiàn)的,最后的內核依然是基于Vue3,運行環(huán)境也是基于Vue3的。
不管是從運行環(huán)境和內核的角度(Vue3環(huán)境適配elementui plus),還是從我項目中引入模塊的角度(僅僅只引入了elementui plus),都不應該是Vue2要求的"success", "info", "warning", "danger", ""五選一,而應該是Vue3中的規(guī)范,"success", "info", "warning", "danger", "primary"五選一。
也就是說雖然我找到了解決警告的方法和出現(xiàn)警告的原因,但其實刨根問底根本就不應該出現(xiàn)這個警告。
這個問題以我現(xiàn)在的學識無法解決,慶幸的是我弄清楚了這個問題的表層和中層原因,已經非常足夠了。
不如大膽一點,我認為這是編譯器/編譯環(huán)境、Vite或者Vue官方三者中某一方出現(xiàn)bug,這個可能性是存在的。
五、總結
一次性解決兩種bug:Invalid prop: custom validator check failed for prop "type". 和Invalid prop: validation failed for prop "type". Expected one of ["success", "info", "warning", "danger", ""], got value "primary".
關鍵不是解決了bug,是知道bug的出現(xiàn)原因,以及有更加深層的思考。思考是bug帶來的最好的禮物。
以上就是Vue升級帶來的elementui沖突警告: Invalid prop: custom validator check failed for prop “type“.的解決方案的詳細內容,更多關于Vue升級導致elementui沖突警告的資料請關注腳本之家其它相關文章!
相關文章
淺析Vue中Virtual?DOM和Diff原理及實現(xiàn)
這篇文章主要為大家詳細介紹了Vue中Virtual?DOM和Diff原理及實現(xiàn)的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2023-03-03