最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue computed計算屬性顯示undefined的解決

 更新時間:2023年11月16日 17:19:33   作者:小小菜鳥在加油  
這篇文章主要介紹了vue computed計算屬性顯示undefined的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue computed計算屬性顯示undefined

在做三級聯(lián)動菜單頁面的時候,之前的幾個報錯都解決了,終于沒有報錯了,控制臺干干凈凈,最后菜單卻沒顯示出來,用vue開發(fā)者工具一看,三級聯(lián)動的模塊里,計算屬性顯示undefined。

在計算屬性里console了一下,數(shù)組什么的都能在控制臺輸出,發(fā)現(xiàn)數(shù)據(jù)明明是傳過來了的,

尷尬,原來是搞各種bug,console來console去的把計算屬性的return整沒了。

computed:{
    ...mapState({
      categoryList:(state)=>{
        // console.log(state.home.categoryList)
        state.home.categoryList
      }
    })
  }

加上return就恢復了。

computed:{
    ...mapState({
      //state的括號可以去掉,函數(shù)的大括號可以去掉
      categoryList:(state)=>{
        // console.log(state.home.categoryList);
        return state.home.categoryList;
      }
    })
  }

nice,我是傘兵。

vue computed 使用避坑

其實不是 computed 的坑,是我自己沒弄清原理瞎用,導致出現(xiàn)各種問題。。

<template>
  <section>
    <input type="button" value="查看三個list的值" @click="lookOneLook" />
    <div>
      list1:
      <span v-for="(o, index) in list1" :key="'list1' + index">
        {{ o }}
      </span>
    </div>
    <div>
      list2:
      <span v-for="(o, index) in list2" :key="'list2' + index">
        {{ o }}
      </span>
      <input type="button" value="向list2中push" @click="list2.push(5)" />
    </div>
    <div>
      list3:
      <span v-for="(o, index) in list3" :key="'list3' + index">
        {{ o }}
      </span>
      <input type="button" value="向list3中push" @click="list3.push(6)" />
    </div>
  </section>
</template>

<script>
export default {
  computed: {
    list2: {
      get() {
        return this.list1;
      },
      set(val) {
        alert("觸發(fā)list2的setter");
        this.list1 = val;
      },
    },
    list3: {
      get() {
        return this.list1.map((o) => o);
      },
      set(val) {
        alert("觸發(fā)list3的setter");
        this.list1 = val;
      },
    },
  },
  data() {
    return {
      list1: [1, 2, 3, 4],
    };
  },
  methods: {
    lookOneLook() {
      alert(`
      list1 : ${this.list1}
      list2 : ${this.list2}
      list3 : ${this.list3}`);
    },
  },
};
</script>

list2.push 和 list3.push 都沒有觸發(fā)的 computed setter。對于引用類型的計算屬性,只有 list2=... 這樣修改引用地址,才會觸發(fā) setter

  • list2.push():能成功修改三個list的值。因為 list2 和 list1 是相同的引用地址,list2.push 此時等價于 list1.push。list1變化后觸發(fā)list3變化
  • list3.push():能成功修改自己,但是數(shù)據(jù)變化沒有觸發(fā)視圖的自動更新。是因為 computed 只是個 Watcher,自身沒有綁定依賴,值變化不會觸發(fā)視圖的更新。所以在頁面中看不到 list3 變化,只能在彈窗中看到 list3 的變化(因為彈窗是每次點擊后當場取值的)
  • list2.push:此時list3 又變回去了

反思

對于引用類型的計算屬性,只有 list2=… 這樣修改引用地址,才會觸發(fā) setter

計算屬性自己只是個 Watcher,不是像 props 和 data 那樣的數(shù)據(jù)。所以絕對不要在計算屬性上加自定義的屬性,因為沒有意義:

1. 它不是對象,沒有依賴關(guān)系。數(shù)據(jù)變化,"依賴"不會更新

2. computed 內(nèi)部關(guān)聯(lián)的變量一旦變化,computed 的值就會重新計算,你自己添加的屬性的修改就都沒了。

下面的寫法一有效,是因為引用相同,相當于什么都沒干就是單純起了個別名。這種起別名的操作以后少干,因為邏輯上很不清晰,復雜的工程中出了 bug 不好調(diào)。

computed:{
	options:{			
		// 寫法一:test() 有效,是因為 this.options 和 this.userObj.options 是相同引用
		return this.userObj.options;
		/** 寫法二:test() 無效
		return {
			name :this.userObj.options.name
		};*/
	}
}
methods:{
	test(){			
		this.options.name='1';	
	}
}```

computed 本質(zhì)就是一個有 value 的 Watcher,別把它當數(shù)據(jù)用?。?!

總結(jié) 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中如何動態(tài)拼接this后面的變量

    vue中如何動態(tài)拼接this后面的變量

    這篇文章主要介紹了vue中如何動態(tài)拼接this后面的變量問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Vue3+Element-plus項目自動導入報錯的解決方案

    Vue3+Element-plus項目自動導入報錯的解決方案

    vue3出來一段時間了,element也更新了版本去兼容vue3,下面這篇文章主要給大家介紹了關(guān)于Vue3+Element-plus項目自動導入報錯的解決方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Vue?非常實用的自定義指令分享

    Vue?非常實用的自定義指令分享

    這篇文章主要介紹了Vue?非常實用的自定義指令分享,Vue自定義指令有全局注冊和局部注冊兩種方式,在?Vue,除了核心功能默認內(nèi)置的指令?(?v-model?和?v-show?),Vue?也允許注冊自定義指令,下文小編給大家分享那些常用到的Vue自定義指令
    2022-02-02
  • vue打包添加gzip配置項方式

    vue打包添加gzip配置項方式

    這篇文章主要介紹了vue打包添加gzip配置項方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue中ref標簽屬性和$ref的關(guān)系解讀

    vue中ref標簽屬性和$ref的關(guān)系解讀

    這篇文章主要介紹了vue中ref標簽屬性和$ref的關(guān)系,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 解決vue.js在編寫過程中出現(xiàn)空格不規(guī)范報錯的問題

    解決vue.js在編寫過程中出現(xiàn)空格不規(guī)范報錯的問題

    下面小編就為大家?guī)硪黄鉀Qvue.js在編寫過程中出現(xiàn)空格不規(guī)范報錯的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 一篇文章,教你學會Vue CLI 插件開發(fā)

    一篇文章,教你學會Vue CLI 插件開發(fā)

    這篇文章主要介紹了Vue CLI插件開發(fā),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Vue之組件的自定義事件詳解

    Vue之組件的自定義事件詳解

    這篇文章主要為大家介紹了Vue之組件的自定義事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Vue 3集成??礧eb插件實現(xiàn)視頻監(jiān)控功能

    Vue 3集成??礧eb插件實現(xiàn)視頻監(jiān)控功能

    本文詳細介紹了如何使用 Vue 3 框架集成海康Web插件實現(xiàn)視頻監(jiān)控功能,通過定義屬性、事件、變量,以及編寫初始化、播放視頻、處理節(jié)點點擊事件等方法,我們成功實現(xiàn)了視頻監(jiān)控系統(tǒng)的前端部分,感興趣的朋友一起看看吧
    2024-11-11
  • Vue中如何獲取json文件中的數(shù)據(jù)

    Vue中如何獲取json文件中的數(shù)據(jù)

    訪問百度音樂API需要傳遞音樂類型參數(shù),而這些參數(shù)是存在musictype.json中,現(xiàn)在在組件listcate.vue需要獲取json數(shù)據(jù),如何實現(xiàn)呢,下面小編給大家?guī)砹薞ue中如何獲取json文件中的數(shù)據(jù),感興趣的朋友一起看看吧
    2022-09-09

最新評論

三门县| 易门县| 中卫市| 珲春市| 山西省| 丹江口市| 湖南省| 仙桃市| 陆丰市| 墨竹工卡县| 神木县| 辽阳市| 鄂伦春自治旗| 吉安县| 芜湖市| 滁州市| 上杭县| 光泽县| 遵义市| 璧山县| 巴塘县| 龙门县| 台山市| 辉南县| 武义县| 广灵县| 大足县| 池州市| 嘉义市| 当阳市| 沧州市| 贵定县| 苏尼特右旗| 长海县| 井冈山市| 大安市| 武冈市| 白水县| 揭东县| 抚顺市| 滨州市|