国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3中的Props

這篇具有很好參考價(jià)值的文章主要介紹了vue3中的Props。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Props聲明

一個(gè)組件需要顯示聲明它所接受的props,這樣vue才能知道外部傳入的哪些是props,哪些是透?jìng)鱝ttribute

在使script setup的單文件中,props可以使用 ==defineProps()==宏來聲明:

<script setup>
const props= defineProps(['foo'])

console.log(props.foo)
<script>

在沒有使用script setup的組件中,prop可以使用props選項(xiàng)來聲明:

export default{
	props:['foo'],
	setup(props){
	//接收props作為第一個(gè)參數(shù)
	console.log(props.foo)
	}
}

注意傳遞給defineProps的參數(shù)和提供給props選項(xiàng)的值是相同的,兩種聲明方式背后其實(shí)使用的都是prop選項(xiàng)。
除了使用字符串?dāng)?shù)組來聲明prop外,還可以使用對(duì)象的形式:

//使用<script setup>
defineProps({
	title:String,
	likes:Number
	}
}
//使用非<script setup>
export default{
 props:{
 	title:String,
 	likes:Nunber
 	}
 }

對(duì)于以對(duì)象形式聲明中的每個(gè)屬性,key是prop的名稱,而值則是該prop預(yù)期類型的構(gòu)造函數(shù)。比如,如果要求一個(gè)prop的值是number類型,則可以使用Number構(gòu)造函數(shù)作為其聲明的值。
對(duì)象形式的props聲明不僅可以一定程度上作為組件的文檔,而且如果其他開發(fā)者在使用你的組件時(shí),傳遞錯(cuò)誤的類型,也會(huì)在瀏覽器控制臺(tái)中拋出警告。我們將在本章節(jié)稍后進(jìn)一步討論有關(guān) prop 校驗(yàn)的更多細(xì)節(jié)。
如果你正在搭配 TypeScript 使用

<script setup lang='ts'>
defineProps<{
	title?:string
	likes?:number
	}>()
</script>

傳遞prop的細(xì)節(jié)

Prop名字格式

如果一個(gè)prop的名字很長,應(yīng)使用camelCase形式,因?yàn)樗鼈兪呛戏ǖ腏avascript 標(biāo)識(shí)符,可以直接在模板的表達(dá)式中使用,也可以避免在作為屬性key名時(shí)必須加上引號(hào)

defineProps({
  greetingMessage: String
})
<span>{{ greetingMessage }}</span>

雖然理論上你也可以在向子組件傳遞props時(shí)使用camelCase形式(使用Dom 內(nèi)模板是例外),但實(shí)際上為了和HTML attribute 對(duì)齊,我們通常會(huì)為其寫為 kebab-case形式:

<MyComponent greeting-message='hello'/>

對(duì)于組件名我們推薦使用 PascalCase ,因?yàn)檫@提高了模板的可讀性,能幫助我們區(qū)分vue組件和原生Html元素。對(duì)于傳遞props來說,使用camelCase并沒有太多優(yōu)勢(shì),因此我們推薦更貼切html的書寫風(fēng)格。

靜態(tài)vs動(dòng)態(tài) prop

至此,你已經(jīng)見過了很多像這樣的靜態(tài)值形式的props:

<BlogPost title='My journey whit vue'/>

相應(yīng)地,還有使用v-bind 或 縮寫 :來動(dòng)態(tài)綁定的props:

<BlogPost :title='post.title' />
<BlogPost :title="post.title+ 'by'+post.author.name"/>

傳遞不同的值類型

在上述的兩個(gè)例子中,我們只傳入了字符串值,但實(shí)際上任何類型的值都可以作為props的值被傳遞。

Number

<!-- 雖然 `42` 是個(gè)常量,我們還是需要使用 v-bind -->
<!-- 因?yàn)檫@是一個(gè) JavaScript 表達(dá)式而不是一個(gè)字符串 -->
<BlogPost :likes="42" />

<!-- 根據(jù)一個(gè)變量的值動(dòng)態(tài)傳入 -->
<BlogPost :likes="post.likes" />

Boolean

<!-- 僅寫上 prop 但不傳值,會(huì)隱式轉(zhuǎn)換為 `true` -->
<BlogPost is-published />

<!-- 雖然 `false` 是靜態(tài)的值,我們還是需要使用 v-bind -->
<!-- 因?yàn)檫@是一個(gè) JavaScript 表達(dá)式而不是一個(gè)字符串 -->
<BlogPost :is-published="false" />

<!-- 根據(jù)一個(gè)變量的值動(dòng)態(tài)傳入 -->
<BlogPost :is-published="post.isPublished" />

Array

<!-- 雖然這個(gè)數(shù)組是個(gè)常量,我們還是需要使用 v-bind -->
<!-- 因?yàn)檫@是一個(gè) JavaScript 表達(dá)式而不是一個(gè)字符串 -->
<BlogPost :comment-ids="[234, 266, 273]" />

<!-- 根據(jù)一個(gè)變量的值動(dòng)態(tài)傳入 -->
<BlogPost :comment-ids="post.commentIds" />

Object

<!-- 雖然這個(gè)對(duì)象字面量是個(gè)常量,我們還是需要使用 v-bind -->
<!-- 因?yàn)檫@是一個(gè) JavaScript 表達(dá)式而不是一個(gè)字符串 -->
<BlogPost
  :author="{
    name: 'Veronica',
    company: 'Veridian Dynamics'
  }"
 />

<!-- 根據(jù)一個(gè)變量的值動(dòng)態(tài)傳入 -->
<BlogPost :author="post.author" />

使用一個(gè)對(duì)象綁定多個(gè)prop

如果你想要將一個(gè)對(duì)象的所有屬性都當(dāng)作props傳入,你可以使用沒有參數(shù)的v-bind,即只使用 v-bind 而非屬性

const post = {
  id: 1,
  title: 'My Journey with Vue'
}

以及下面的模板:

<BlogPost v-bind="post" />

而這實(shí)際上等價(jià)于:

<BlogPost :id="post.id" :title="post.title" />

單向數(shù)據(jù)流

所有的props都遵循著單向綁定原則,props因父組件的更新而變化,自然地將新狀態(tài)向下流往子組件,而不會(huì)逆向傳遞。這避免了子組件意外修改父組件的狀態(tài)的情況,不然應(yīng)用的數(shù)據(jù)流將會(huì)很容易變得混亂而難以理解。
另外,每次父組件更新完后,所有的子組件中的props都會(huì)被更新到最新值,這意味著你不應(yīng)該在子組件中去修改一個(gè)prop。否則會(huì)拋出警告:

const props = defineProps(['foo'])

// ? 警告!prop 是只讀的!
props.foo = 'bar'

導(dǎo)致你想要更改一個(gè)prop的需求通常來之以下兩種場(chǎng)景:
1.prop被用于傳入初始值,而子組件想在之后將其作為一個(gè)局部數(shù)據(jù)屬性。愛這種情況下,最好是新定義一個(gè)局部數(shù)據(jù)屬性,從props上獲取初始值即可:

const props =defineProps(['initialCounter'])
// 計(jì)數(shù)器只是將 props.initialCounter 作為初始值
// 像下面這樣做就使 prop 和后續(xù)更新無關(guān)了
const counter = ref(props.initialCounter)

2.需要對(duì)傳入的prop值做進(jìn)一步的轉(zhuǎn)換,在這種情況下,最好是基于該prop值定義一個(gè)計(jì)算屬性:

const props = defineProps(['size'])

// 該 prop 變更時(shí)計(jì)算屬性也會(huì)自動(dòng)更新
const normalizedSize = computed(() => props.size.trim().toLowerCase())

更改對(duì)象 / 數(shù)組類型的 props

當(dāng)對(duì)象或數(shù)組作為 props 被傳入時(shí),雖然子組件無法更改 props 綁定,但仍然可以更改對(duì)象或數(shù)組內(nèi)部的值。這是因?yàn)?JavaScript 的對(duì)象和數(shù)組是按引用傳遞,而對(duì) Vue 來說,禁止這樣的改動(dòng),雖然可能生效,但有很大的性能損耗,比較得不償失。

這種更改的主要缺陷是它允許了子組件以某種不明顯的方式影響父組件的狀態(tài),可能會(huì)使數(shù)據(jù)流在將來變得更難以理解。在最佳實(shí)踐中,你應(yīng)該盡可能避免這樣的更改,除非父子組件在設(shè)計(jì)上本來就需要緊密耦合。在大多數(shù)場(chǎng)景下,子組件應(yīng)該拋出一個(gè)事件來通知父組件做出改變。文章來源地址http://www.zghlxwxcb.cn/news/detail-716999.html

到了這里,關(guān)于vue3中的Props的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Vue2和Vue3是Vue.js框架的兩個(gè)主要版本,它們之間有以下區(qū)別

    性能優(yōu)化:Vue3在內(nèi)部進(jìn)行了重寫,采用了更高效的虛擬DOM算法,使得渲染速度更快,性能更好。 更小的體積:Vue3的體積比Vue2更小,這意味著更快的下載和加載速度。 Composition API:Vue3引入了Composition API,它是一種新的組合式API,可以更好地組織和重用組件邏輯,使得代碼更

    2024年02月15日
    瀏覽(26)
  • 【前端vue升級(jí)】vue2+js+elementUI升級(jí)為vue3+ts+elementUI plus

    【前端vue升級(jí)】vue2+js+elementUI升級(jí)為vue3+ts+elementUI plus

    gogo code 是一個(gè)基于 AST (源代碼的抽象語法結(jié)構(gòu)樹狀表現(xiàn)形式)的 JavaScript/Typescript/HTML 代碼轉(zhuǎn)換工具,可以用它來構(gòu)建一個(gè)代碼轉(zhuǎn)換程序來幫助自動(dòng)化完成如框架升級(jí)、代碼重構(gòu)、多平臺(tái)轉(zhuǎn)換等工作。 當(dāng)前 GoGoCode 支持解析和操作如下類型的代碼: ○JavaScript(JSX) ○Typescript

    2024年02月12日
    瀏覽(31)
  • Vue2 watch監(jiān)聽props的值

    Vue2 watch監(jiān)聽props的值

    再次遇到監(jiān)聽子組件收到父組件傳過來的值,如果這個(gè)值變化,頁面中的值發(fā)現(xiàn)是不會(huì)跟著同步變化的。所以監(jiān)聽props中的值,一直監(jiān)聽。 ? 代碼: ?

    2024年02月13日
    瀏覽(20)
  • vue3中的excel表導(dǎo)出功能(選中導(dǎo)出或?qū)С鏊?,也可支持vue2)

    vue3中的excel表導(dǎo)出功能(選中導(dǎo)出或?qū)С鏊校部芍С講ue2)

    1.安裝模塊 npm install xlsx?file-saver?-S 2.文件導(dǎo)入 import?*?as?XLSX?from?\\\"xlsx\\\"; import?FileSaver?from?\\\"file-saver\\\" 3.整體代碼(可選中導(dǎo)出或?qū)С鏊? id綁定表格全部導(dǎo)出 4.效果如下 ? ? ? ?

    2024年02月17日
    瀏覽(23)
  • 【vue2中的pdf預(yù)覽】iframe/pdf.js/vue-pdf

    vue2中預(yù)覽pdf的方法有pdf.js和vue-pdf等。下面進(jìn)行簡單對(duì)比使用方法的介紹。 使用iframe預(yù)覽pdf 如果后端返回的不是url,那么需要使用 responseType = \\\'blob\\\' 來讀取后端傳來的內(nèi)容。 擴(kuò)展: 同樣是使用iframe進(jìn)行預(yù)覽,如果有 其他格式 如word/xls/ppt/txt的文件需要預(yù)覽,可以使用微軟解

    2024年02月09日
    瀏覽(75)
  • Vue3 - props

    Vue3 - props

    props 用于接收父組件傳遞的值 在使用 script setup 的單文件組件中,props 可以使用 defineProps() 宏來聲明: 在沒有使用 script setup 的組件中,prop 可以使用 props 選項(xiàng)來聲明(和vue2一致): 傳遞給 defineProps() 的參數(shù)和提供給 props 選項(xiàng)的值是相同的,兩種聲明方式背后其實(shí)使用的都

    2024年02月05日
    瀏覽(19)
  • 【vue3】vue3接收props以及emit的用法

    技術(shù) :vue3.2.40 UI框架 :arco-design 2.44.7 css技術(shù) :less 4.1.3 實(shí)現(xiàn) :子組件接收props以及通過emit方法傳值父組件 vue3使用的組合式API,我這里使用的是defineComponent 1.setup里如果需要接收props和使用emit,只需要帶參數(shù) setup(props, { emit }) 2.setup里面只需要帶emit(‘handleCancel’),不需要帶

    2024年02月15日
    瀏覽(24)
  • 前端學(xué)習(xí)---vue2--選項(xiàng)/數(shù)據(jù)--data-computed-watch-methods-props

    前端學(xué)習(xí)---vue2--選項(xiàng)/數(shù)據(jù)--data-computed-watch-methods-props

    寫在前面: vue提供了很多數(shù)據(jù)相關(guān)的。 簡單的說就是進(jìn)行雙向綁定的區(qū)域。 vue實(shí)例的數(shù)據(jù)對(duì)象,會(huì)把data的數(shù)據(jù)轉(zhuǎn)換成getter和setter,從而可以進(jìn)行響應(yīng)式的變化, vue實(shí)例創(chuàng)建后,可以通過vm.$data.x獲取data里面的x,但同時(shí)vue實(shí)例也代理了其中的對(duì)象,所以我們一般使用簡單的

    2024年02月14日
    瀏覽(59)
  • Vue3 props的使用詳解

    Props 聲明 1、字符串?dāng)?shù)組聲明props ?2.對(duì)象實(shí)現(xiàn)props 你還可以使用類型標(biāo)注,這是ts的特性。 3、使用camelCase(小駝峰命名法),可以在模板中直接使用(如第一個(gè)例子)??创a 4、動(dòng)態(tài)綁定props 注意事項(xiàng):defineprops在之前的Vue版本中需要引入,但是現(xiàn)在是不需要了。上面幾個(gè)例子

    2024年02月16日
    瀏覽(17)
  • Vue3——第十二章(Props)

    Vue3——第十二章(Props)

    一個(gè)組件需要顯式聲明它所接受的 props,這樣 Vue 才能知道外部傳入的哪些是 props,哪些是透?jìng)?attribute 在使用 script setup 的單文件組件中,props 可以使用 defineProps() 宏來聲明: 在沒有使用 script setup 的組件中,prop 可以使用 props 選項(xiàng)來聲明: 注意傳遞給 defineProps() 的參數(shù)和提

    2023年04月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包