成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

詳解Vue中的Props與Data細微差別

瀏覽:152日期:2023-02-04 13:36:21

Vue提供了兩種不同的存儲變量:props和data。

這些方法一開始可能會讓人感到困惑,因為它們做的事情很相似,而且也不清楚什何時使用props,何時使用data。

那么props和data有什么區別呢?

data是每個組件的私有內存,可以在其中存儲需要的任何變量。props是將數據從父組件傳遞到子組件的方式。

在本文中,我們將學習到:

什么是props,為什么這些數據只向下流動,而不是向上 data 選項的用途 響應式是什么 如何避免 props 和 data 之間的命名沖突 如何將 props 和 data 結合使用

什么是 props

在Vue中,props(或properties)是我們將數據從父組件向下傳遞到其子組件的方式。

當我們使用組件構建應用程序時,最終會構建一個稱為樹的數據結構。 類似于家譜,具有:

父母 孩子 祖先 子孫

數據從根組件(位于最頂端的組件)沿著樹向下流動。就像基因是如何代代相傳的一樣,父組件也會將自己的props傳給了他們的孩子。

在Vue中,我們在代碼的<template>中向組件添加了一些props

<template> <my-component cool-prop='hello world'></my-component></template>

在這個例子中,我們傳遞一個名為color-prop prop,其值為“hello world”。我們能夠從my-component內部訪問這個值。

然而,當我們從組件內部訪問props時,我們并不擁有它們,所以我們不能更改它們(就像你不能改變你父母給你的基因一樣)。

注意:雖然可以更改組件中的屬性,但這是一個非常糟糕的主意。最終還會更改父類正在使用的值,這可能會導致很多混淆。但是有些情況我們需要改變變量,所以 data 就派上用場了。

什么是 data ?

data是每個組件的內存,這是存儲數據和希望跟蹤的任何其他變量的地方。

如果我們正在構建一個計數器應用程序,我們將需要跟蹤計數,因此我們將向我們的data添加一個count:

<template> <div> {{ count }} <button @click='increment'>+</button> <button @click='decrement'>-</button> </div></template>------------------------------------------export default { name: ’Counter’, data() { return { // Initialized to zero to begin count: 0, } }, methods: { increment() { this.count += 1; }, decrement() { this.count -= 1; } }}

此處的data是私有的,僅供組件本身使用,其他組件不能訪問它。

注意:理論上是其它組件是不能訪問這些數據,但實際是可以的。但是出于同樣的原因,這樣做是非常糟糕的如果需要向組件傳遞數據,可以使用props向下傳遞數據(傳遞給子組件),或者使用事件向上傳遞數據(傳遞給父組件)。

props 和 data 都是響應式的

使用 Vue,我們不需要過多地考慮組件什么時候會更新,Vue 會自動幫我們做好,因為 Vue 是響應式的。

我們不必每次更改 data 都調用setState,只需更改data即可! 只要要更新具有響應式的屬性(props,computed 及 data 中的任何值),Vue 就會知道它何時發生變化。

回到計數器應用程序,我們仔細看看這里面的方法

methods: { increment() { this.count += 1; }, decrement() { this.count -= 1; }}

我們所要做的就是更新count,Vue 會檢測到這個變化,然后用新值重新渲染我們的應用程序

Vue 的響應系統有很多細微的差別,如果你想要高效地使用Vue,理解它是非常重要的。如果你想更深入地了解Vue的響應系統,這里有更多要了解的東西。

避免命名沖突

Vue所做的另一件事是,使開發工作變得更好一點。

我們在組件上定義一些 props 和 data

export default { props: [’propA’, ’propB’], data() { return { dataA: ’hello’, dataB: ’world’, }; },};

如果要在方法內部訪問它們,則不必使用this.props.propA或this.data.dataA。 Vue 讓我們完全省略了 props 和 dasta,只剩下了更整潔的代碼。

我們可以使用this.propA或this.dataA訪問它們:

methods: { coolMethod() { // Access a prop console.log(this.propA); // Access our data console.log(this.dataA); }}

因此,如果我們不小心在data和 props中使用相同的名稱,則會遇到問題。

如果發生這種情況,Vue 會給你一個警告,因為它不知道你想訪問哪個。

export default { props: [’secret’], data() { return { secret: ’1234’, }; }, methods: { printSecret() { // 我們想要哪一個? console.log(this.secret); } }};

當我們同時使用props和data時,Vue 的神奇之處就產生了。

props 和 data 一起使用

既然我們已經看到了 props 和 data 的不同之處,讓我們來看看為什么我們需要兩個,通過建立一個基本的應用程序。

我們將使用名為ContactInfo的組件顯示此信息:

// ContactInfo<template> <div class='container'> <div class='row'> Email: {{ emailAddress }} Twitter: {{ twitterHandle }} Instagram: {{ instagram }} </div> </div></template>-------------------------------------export default { name: ’ContactInfo’, props: [’emailAddress’, ’twitterHandle’, ’instagram’],};

ContactInfo組件接受 props:emailAddress,twitterHandle和instagram,并將其顯示在頁面上。

我們的個人資料頁面組件ProfilePage如下所示:

// ProfilePage<template> <div class='profile-page'> <div class='avatar'> <img src='http://www.piao2010.com/bcjs/user.profilePicture' /> {{ user.name }} </div> </div></template>-------------------------------------------------export default { name: ’ProfilePage’, data() { return { // In a real app we would get this data from a server user: { name: ’John Smith’, profilePicture: ’./profile-pic.jpg’, emailAddress: ’john@smith.com’, twitterHandle: ’johnsmith’, instagram: ’johnsmith345’, }, } }};

我們的ProfilePage組件目前顯示用戶的配置文件圖片及其名稱,它還有用戶數據對象。

我們如何從父組件(ProfilePage)向下獲取數據到子組件(ContactInfo)

我們必須使用 props 傳遞數據。

首先,我們需要將ContactInfo組件導入ProfilePage組件

// Import the componentimport ContactInfo from ’./ContactInfo.vue’;export default { name: ’ProfilePage’, // Add it as a dependency components: { ContactInfo, }, data() { return { user: { name: ’John Smith’, profilePicture: ’./profile-pic.jpg’, emailAddress: ’john@smith.com’, twitterHandle: ’johnsmith’, instagram: ’johnsmith345’, }, } }};

其次,我們必須在<template>中添加組件:

// ProfilePage<template> <div class='profile-page'> <div class='avatar'> <img src='http://www.piao2010.com/bcjs/user.profilePicture' /> {{ user.name }} </div> <!-- Add component in with props --> <contact-info :email-address='emailAddress' :twitter-handle='twitterHandle' :instagram='instagram' /> </div></template>

現在ContactInfo需要的所有用戶數據都將沿著組件樹向下流動,并從ProfilePage進入ContactInfo。

我們將數據保存在ProfilePage而不是ContactInfo中的原因是ProfilePage頁面的其他部分需要訪問user對象。

由于數據只向下流,這意味著我們必須將數據放在組件樹中足夠高的位置,以便它可以向下流到需要去的所有位置。

原文:https://medium.com/js-dojo/vue-data-flow-how-it-works-3ff316a7ffcd

PS:vue中把props中的值賦值給data

父組件:

<template> <div> <navbar :ctype='ctype'></navbar> </div></template><script>import navbar from ’@/components/navbar’ export default { components: {navbar}, data () { return{ ctype:1 } } }</script>

子組件:

<template> <div> <div>{{thistype}}</div> </div></template><script>export default { props:[’ctype’], computed: { normalizedSize: function () { return this.ctype.trim().toLowerCase() } }, data(){ return{ thistype:this.ctype } }}</script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
精品久久免费看| 日日夜夜免费精品| 欧美大胆人体bbbb| 久久精品国产久精国产爱| 色综合婷婷久久| 日韩欧美一级二级三级| 国产一区二区三区四| 欧美日韩一区二区不卡| 久久福利资源站| 亚洲精品字幕| 国产精品三级久久久久三级| k8久久久一区二区三区| 欧美精品 日韩| 亚洲狠狠爱一区二区三区| 伊大人香蕉综合8在线视| 欧美丰满少妇xxxxx高潮对白 | 欧美三级电影精品| 日本午夜一本久久久综合| 久久精品女人| 亚洲3atv精品一区二区三区| 久久国产欧美精品| 亚洲第一成人在线| 久久一区中文字幕| 秋霞午夜av一区二区三区| 久久一区免费| 老鸭窝一区二区久久精品| 欧美三级蜜桃2在线观看| 久久99精品国产麻豆婷婷| 欧美亚一区二区| 亚洲精品国产精品乱码不99| 今天的高清视频免费播放成人| 欧美一区二区三区视频在线| 国产精品123区| 欧美成人精品福利| 91在线观看一区二区| 久久九九久久九九| 国产精品亚洲视频| 日韩视频中午一区| 激情成人午夜视频| 欧美丰满少妇xxxxx高潮对白| 亚洲韩国一区二区三区| 在线播放一区| 亚洲在线观看免费| 在线视频国产一区| 国产一区二区按摩在线观看| 欧美xxxxxxxxx| 色综合中文综合网| 黄色一区三区| 亚洲精品久久久久久国产精华液 | 久久av一区二区三区| 午夜伦理一区二区| 欧美三级蜜桃2在线观看| 日韩高清在线观看| 欧美精品久久99久久在免费线 | 国产日本精品| 日韩成人午夜精品| 欧美一级二级三级乱码| 欧美一区二区三区在线播放| 精品日韩成人av| 欧美日韩在线观看一区二区三区| 337p粉嫩大胆色噜噜噜噜亚洲 | 亚洲人成网站色在线观看| 亚洲一区二区在线免费观看| 久久精品72免费观看| 日韩欧美国产精品| 国产中文一区| 天堂在线亚洲视频| 91精品国产手机| 国语精品中文字幕| 日本亚洲三级在线| 精品国产一区二区精华| 1024亚洲| 日本三级亚洲精品| 亚洲精品一区二区三区影院| 成人高清免费观看| 中文字幕亚洲精品在线观看| 91九色02白丝porn| 99这里只有精品| 亚洲精品高清在线观看| 色一区在线观看| 日本人妖一区二区| 欧美va日韩va| 国产一区二区你懂的| 精品亚洲免费视频| 国产精品天干天干在线综合| 精品动漫3d一区二区三区免费版| 综合网在线视频| 99国产精品久久久久老师| 日韩国产高清影视| 欧美性生活一区| 91啦中文在线观看| 日本午夜精品视频在线观看 | 伊人蜜桃色噜噜激情综合| 国产精品卡一卡二| 色av综合在线| 欧美日本韩国一区二区三区| 日本va欧美va欧美va精品| 久久精品人人做| 狠狠色丁香久久综合频道| 丝袜亚洲另类丝袜在线| 久久夜色精品国产噜噜av| 国产精品一区在线播放| 国产福利一区在线| 国产日韩欧美制服另类| 校园激情久久| 97久久久精品综合88久久| 国产精品久久久久久久浪潮网站| 亚洲国产午夜| 国产在线精品不卡| 亚洲欧美一区二区三区极速播放| 一区二区av| 视频一区国产视频| 精品动漫一区二区三区在线观看| 精品999日本| 国产成人久久精品77777最新版本| 久久只精品国产| 91黄色在线观看| 伊人精品视频| 成人午夜在线视频| 性做久久久久久久免费看| 欧美无砖专区一中文字| 午夜天堂精品久久久久| 黄色成人免费在线| 亚洲欧美日韩中文字幕一区二区三区 | 久久久久国产精品麻豆ai换脸| 亚洲精选在线| 成人免费视频一区| 婷婷丁香激情综合| 国产精品伦理在线| 久久精品盗摄| 亚洲午夜精品福利| 成人妖精视频yjsp地址| 日韩高清在线电影| 亚洲日本一区二区| 欧美mv和日韩mv的网站| 午夜影院日韩| 欧美日韩在线观看一区二区三区| 午夜久久福利影院| 2023国产精品视频| 91精品国产色综合久久久蜜香臀| 韩日精品在线| 成人国产精品免费网站| 亚洲狠狠丁香婷婷综合久久久| 欧美系列一区二区| 国产私拍一区| 国产精品二区在线| eeuss影院一区二区三区| 韩国av一区二区三区在线观看| 国产日韩视频一区二区三区| 69av一区二区三区| 91福利在线看| 免费一区视频| 99综合精品| 亚洲激情偷拍| 亚洲天堂激情| 午夜精品免费| 欧美一区二区三区久久精品茉莉花 | 国产精品美女久久久久高潮| 2021国产精品久久精品| 制服.丝袜.亚洲.中文.综合| 色老头久久综合| 午夜影院日韩| 国产精品美女久久久浪潮软件| 国产精品一区二区在线观看不卡 | 欧美 日韩 国产 一区| 婷婷开心激情综合| 一区二区三区中文字幕电影| 日韩美女一区二区三区| 在线成人小视频| 欧美日产在线观看| 欧美女孩性生活视频| 亚洲小说欧美另类社区| 色综合久久综合网欧美综合网| 免费观看30秒视频久久| 亚洲www啪成人一区二区麻豆| 日韩女优电影在线观看| 欧美精品视频www在线观看| 欧美日精品一区视频| 伊人成人在线| 狠狠色狠狠色综合日日tαg| 国产精品二区在线| 国产精品v欧美精品v日韩精品| 久久精品国产一区二区| 蜜臀av亚洲一区中文字幕| 日本午夜精品视频在线观看| 欧美a级理论片| 麻豆精品在线观看| 精品一区二区三区免费毛片爱| 亚洲一区二区三区在线看| 亚洲最大的成人av| 亚洲丰满少妇videoshd| 亚洲成av人片www| 奇米影视一区二区三区小说| 五月天精品一区二区三区| 亚州成人在线电影| 青青国产91久久久久久| 一区二区三区**美女毛片| 国产亚洲精品资源在线26u| 国产精品久线在线观看| 亚洲精品一区二区三区福利|