我剛剛發現不是像這樣定義組件的屬性:
const props = defineProps({
id: Number,
title: String,
name: String,
})
我可以這樣做:
defineProps([
'id',
'title',
'name',
])
這似乎不需要type宣告,但這樣做有什么缺點嗎?是否自行vue確定type每個屬性的?
我正在使用script setup.
uj5u.com熱心網友回復:
缺點當然是安全性較低。
vue會自己判斷每個屬性的型別嗎? 不
提供字串陣列時,Vue 根本不會驗證傳遞的道具的型別,因此在使用不正確的情況下(這很可能發生,因為其他開發者/未來你無法在不閱讀的情況下知道應該傳遞什么其余的組件代碼)你最終會在你的組件中的某個地方出現一些運行時錯誤,而不是干凈的錯誤/警告作為 prop 傳遞的錯誤值(或來自你的 IDE 的一個明智的錯誤)
大多數時候,您應該盡可能多地使用特定的道具定義。
uj5u.com熱心網友回復:
好吧,這不僅僅是type宣告。
這是一個道具驗證功能。完整的語法是
const props = defineProps({
name: String,
id: [ Number, String ],
style: {
type: Object,
default: ()=>{
color: "red",
bg-color: "white"
},
validator: function (value) {
return ['red', 'blue', 'green'].includes(value.color)
}
},
})
所以只使用命名道具的缺點是:
- 沒有
type safety。但即使在這種情況下,typed props它也只會在開發構建中顯示控制臺警告。
而使用道具定義的好處是
types單個道具的多個- 道具的默認值
- 自定義驗證器功能
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451595.html
