欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象

 更新時(shí)間:2023年04月24日 15:47:54   作者:Mh  
這篇文章主要介紹了vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象,本文通過(guò)示例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

實(shí)例和組件中 data 的區(qū)別?

實(shí)際上在實(shí)例中的 data 是可以寫成對(duì)象的形式也可以寫成函數(shù)的形式。 只有在組件中 data 必須寫成函數(shù)的形式。

<script>
export default {
  data: {}, 
};
</script>

如果我們?cè)诮M件中將 data 寫成函數(shù)的形式,控制臺(tái)就會(huì)報(bào)錯(cuò)。

組件中 data 定義對(duì)象和函數(shù)區(qū)別?

當(dāng)我們定義好一個(gè)組件的時(shí)候,vue 最終都會(huì)通過(guò) vue.extend() 構(gòu)建成組件實(shí)例,這里我們采用構(gòu)造函數(shù)的形式模擬。

<script>
// 模仿構(gòu)造函數(shù),定義data屬性采用對(duì)象的形式
function Component() {}
Component.prototype.data = {
  count: 1,
};

// 創(chuàng)建兩個(gè)組件實(shí)例
const componentA = new Component();
const componentB = new Component();

// 當(dāng)修改其中一個(gè)組件的中的data值的時(shí)候,另一個(gè)組件的data值會(huì)一起改變
componentA.data.count = 2;
console.log(componentB.data.count); // 2
</script>

分析: 產(chǎn)生上面的原因是兩個(gè)組件實(shí)例共享同一內(nèi)存地址,當(dāng)修改 componentA 的時(shí)候,componentB 會(huì)同步發(fā)生改變。

如果采用函數(shù)的寫法?

<script>
// 模仿構(gòu)造函數(shù),定義data屬性采用函數(shù)的形式
function Component() {
  this.data = this.data();
}
Component.prototype.data = function () {
  return {
    count: 1,
  };
};

// 創(chuàng)建兩個(gè)組件實(shí)例
const componentA = new Component();
const componentB = new Component();

// 當(dāng)修改其中一個(gè)組件的中的data值的時(shí)候,另一個(gè)組件的data值不會(huì)一起改變
componentA.data.count = 2;
console.log(componentB.data.count); // 1
</script>

分析:這是由于,函數(shù)返回的對(duì)象地址并不相同,這樣每個(gè)組件中 data 都是獨(dú)立的,這樣修改其中一個(gè)組件不會(huì)影響其他組件中的 data 值。

總結(jié)

  • 在根組件中 data 可以是函數(shù)或者對(duì)象,不會(huì)造成數(shù)據(jù)污染。
  • 在組件中 data 必須是函數(shù)的寫法,這樣返回的組件實(shí)例中 data 都是獨(dú)立的對(duì)象,不會(huì)發(fā)生數(shù)據(jù)污染。

擴(kuò)展

vue 組件data用箭頭函數(shù)行不行?

可以使用箭頭函數(shù),但是需要注意 this 指向。如果使用箭頭函數(shù),data 函數(shù)中的 this 不會(huì)指向 vue 實(shí)例,如果需要訪問(wèn) vue 實(shí)例,可以通過(guò) data 函數(shù)的參數(shù)來(lái)實(shí)現(xiàn)。

data: vm =&gt; ({ a: vm.myProp })

作者:

實(shí)例和組件中 data 的區(qū)別?

實(shí)際上在實(shí)例中的 data 是可以寫成對(duì)象的形式也可以寫成函數(shù)的形式。 只有在組件中 data 必須寫成函數(shù)的形式。

&lt;script&gt;
export default {
  data: {}, 
};
&lt;/script&gt;
復(fù)制代碼

如果我們?cè)诮M件中將 data 寫成函數(shù)的形式,控制臺(tái)就會(huì)報(bào)錯(cuò)。

image.png

組件中 data 定義對(duì)象和函數(shù)區(qū)別?

當(dāng)我們定義好一個(gè)組件的時(shí)候,vue 最終都會(huì)通過(guò) vue.extend() 構(gòu)建成組件實(shí)例,這里我們采用構(gòu)造函數(shù)的形式模擬。

&lt;script&gt;
// 模仿構(gòu)造函數(shù),定義data屬性采用對(duì)象的形式
function Component() {}
Component.prototype.data = {
  count: 1,
};

// 創(chuàng)建兩個(gè)組件實(shí)例
const componentA = new Component();
const componentB = new Component();

// 當(dāng)修改其中一個(gè)組件的中的data值的時(shí)候,另一個(gè)組件的data值會(huì)一起改變
componentA.data.count = 2;
console.log(componentB.data.count); // 2
&lt;/script&gt;
復(fù)制代碼

分析: 產(chǎn)生上面的原因是兩個(gè)組件實(shí)例共享同一內(nèi)存地址,當(dāng)修改 componentA 的時(shí)候,componentB 會(huì)同步發(fā)生改變。

如果采用函數(shù)的寫法?

&lt;script&gt;
// 模仿構(gòu)造函數(shù),定義data屬性采用函數(shù)的形式
function Component() {
  this.data = this.data();
}
Component.prototype.data = function () {
  return {
    count: 1,
  };
};

// 創(chuàng)建兩個(gè)組件實(shí)例
const componentA = new Component();
const componentB = new Component();

// 當(dāng)修改其中一個(gè)組件的中的data值的時(shí)候,另一個(gè)組件的data值不會(huì)一起改變
componentA.data.count = 2;
console.log(componentB.data.count); // 1
&lt;/script&gt;
復(fù)制代碼

分析:這是由于,函數(shù)返回的對(duì)象地址并不相同,這樣每個(gè)組件中 data 都是獨(dú)立的,這樣修改其中一個(gè)組件不會(huì)影響其他組件中的 data 值。

總結(jié)

  • 在根組件中 data 可以是函數(shù)或者對(duì)象,不會(huì)造成數(shù)據(jù)污染。
  • 在組件中 data 必須是函數(shù)的寫法,這樣返回的組件實(shí)例中 data 都是獨(dú)立的對(duì)象,不會(huì)發(fā)生數(shù)據(jù)污染。

擴(kuò)展

vue 組件data用箭頭函數(shù)行不行?

可以使用箭頭函數(shù),但是需要注意 this 指向。如果使用箭頭函數(shù),data 函數(shù)中的 this 不會(huì)指向 vue 實(shí)例,如果需要訪問(wèn) vue 實(shí)例,可以通過(guò) data 函數(shù)的參數(shù)來(lái)實(shí)現(xiàn)。

data: vm =&gt; ({ a: vm.myProp })

到此這篇關(guān)于vue中為什么在組件內(nèi)部data是一個(gè)函數(shù)而不是一個(gè)對(duì)象?的文章就介紹到這了,更多相關(guān)vue中data為什么是函數(shù)而不是對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法

    這篇文章主要介紹了vue登錄頁(yè)實(shí)現(xiàn)使用cookie記住7天密碼功能的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 使用vue-cli3打包dist路徑問(wèn)題修改打包配置

    使用vue-cli3打包dist路徑問(wèn)題修改打包配置

    這篇文章主要介紹了使用vue-cli3打包dist路徑問(wèn)題修改打包配置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue使用Google地圖的實(shí)現(xiàn)示例代碼

    vue使用Google地圖的實(shí)現(xiàn)示例代碼

    這篇文章主要介紹了vue使用Google地圖的實(shí)現(xiàn)示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • vue parseHTML函數(shù)源碼解析 AST預(yù)備知識(shí)

    vue parseHTML函數(shù)源碼解析 AST預(yù)備知識(shí)

    這篇文章主要為大家介紹了vue parseHTML函數(shù)源碼解析 AST預(yù)備知識(shí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue 調(diào)用 RESTful風(fēng)格接口操作

    vue 調(diào)用 RESTful風(fēng)格接口操作

    這篇文章主要介紹了vue 調(diào)用 RESTful風(fēng)格接口操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue 優(yōu)化CDN加速的方法示例

    vue 優(yōu)化CDN加速的方法示例

    這篇文章主要介紹了vue 優(yōu)化CDN加速的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 17個(gè)vue常用的數(shù)組方法總結(jié)與實(shí)例演示

    17個(gè)vue常用的數(shù)組方法總結(jié)與實(shí)例演示

    這篇文章主要介紹了vue中常用的數(shù)組方法,包括:VUE數(shù)組轉(zhuǎn)換字符串,VUE數(shù)組遍歷,VUE數(shù)組過(guò)濾,VUE數(shù)組查詢,VUE數(shù)組排序等功能,需要的朋友可以參考下
    2022-12-12
  • vue data變量相互賦值后被實(shí)時(shí)同步的解決步驟

    vue data變量相互賦值后被實(shí)時(shí)同步的解決步驟

    這篇文章主要介紹了vue data變量相互賦值后被實(shí)時(shí)同步的解決步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • Vue二次封裝axios流程詳解

    Vue二次封裝axios流程詳解

    在vue項(xiàng)目中,和后臺(tái)交互獲取數(shù)據(jù)這塊,我們通常使用的是axios庫(kù),它是基于promise的http庫(kù),下面這篇文章主要給大家介紹了關(guān)于Vue3引入axios封裝接口的兩種方法,需要的朋友可以參考下
    2022-10-10
  • vue elementUI select下拉框如何設(shè)置默認(rèn)值

    vue elementUI select下拉框如何設(shè)置默認(rèn)值

    這篇文章主要介紹了vue elementUI select下拉框如何設(shè)置默認(rèn)值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論