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

Vue組件傳值過程接收不成功的問題及解決

 更新時間:2024年06月07日 10:04:41   作者:bliss小寶  
這篇文章主要介紹了Vue組件傳值過程接收不成功的問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Vue組件傳值過程接收不成功

第一個方式

  watch: {
    currentleCode: {
      handler() {
        this.setOptions()
      },
      deep: true
    }
  },

deep: true 使用深度監(jiān)聽監(jiān)聽傳過來的數(shù)據(jù) (如果數(shù)組的情況)

第二種方式

mounted() {
    this.getoptions()
  }
methods: {
    getoptions() {
      if (this.options) {
        this.setOptions()
      } else {
        setTimeout(() => {
          this.getoptions()
        }, 100)
      }
    }
   }

如果值傳過來了 再進(jìn)行后續(xù)部分 避免頁面報錯

額外注意的是 組件賦值的時候我們都喜歡用 =

又因為 = 不會觸發(fā)Vue的set()和get()

所以推薦大家以后用set

// this.filterOptions[this.cuoduleCode] = res.data
this.$set(this.filterOptions, this.curreeCode, res.data)

Vue.set()和this.$ set()的區(qū)別在于:Vue.set()是將set函數(shù)綁定在Vue構(gòu)造函數(shù)上,this.$set()是將set函數(shù)綁定在Vue原型上。

使用Vue.set()和this.$ set()可以解決不重新渲染的問題

Vue組件異步數(shù)據(jù)傳值問題

在組件傳值中有時會遇到傳的值是異步請求的數(shù)據(jù),從而導(dǎo)致一些可能的問題。

如:父傳子。父組件中發(fā)起請求拿到數(shù)據(jù),將數(shù)據(jù)傳給子組件,子組件卻接收不到值。

在網(wǎng)上搜索了很多,也看了很大大佬的解決方法,如使用監(jiān)聽器監(jiān)聽傳過來的數(shù)值等,但是都沒有解決問題(可能是我沒有學(xué)到家),但是最后還是靠其他大佬解決了問題,做了總結(jié),讓學(xué)習(xí)Vue的小伙伴們可以更好的學(xué)習(xí)。

場景解析

傳值的數(shù)據(jù)是引用數(shù)據(jù)類型,你使用了reactive

<template>
    <Child :data='data'></Child>
</template>

<script setup>
let data = reactive([])

onMounted(()=>{
    請求.then(res=>{
        data = res.data
    })
})
</script>

乍一看,是不是沒有啥問題,但是子組件那邊用definProps拿到的值,它就是空的。

起初我的想法是,因為請求是異步的,子組件拿到的是初始化的空數(shù)組,然后父組件中才拿到請求回來的值。為了驗證我的想法,我在父子組件中都設(shè)置了一個按鈕,用來獲取當(dāng)前的數(shù)值。

頁面加載完畢后,點(diǎn)擊父組件的按鈕,有值;點(diǎn)擊子組件的按鈕,空值;手動影響父組件,致使父組件再次渲染,此時再去點(diǎn)擊子組件的按鈕,嗯哼?有值了,所以想法應(yīng)該是沒有大問題的。

v-if

為了解決這個問題,我使用了監(jiān)聽等各種方法,都沒有成功,最后,我使用了v-if

<template>
    <Child v-if='flag' :data='data'></Child>
</template>

<script setup>
let data = reactive([])
let flag= ref(false)

onMounted(()=>{
    請求.then(res=>{
        data = res.data
        flag.value = true
    })
})
</script>

在拿到請求后再去加載子組件,說白了就是讓子組件的渲染時機(jī)跟著請求走。

這樣子確實解決了,但是,總感覺不是很優(yōu)雅。

所以,找了大佬,發(fā)現(xiàn),數(shù)據(jù)那里出問題了。

ref

let data = reactive([])
data = res.data

一個簡單的賦值語句,相信基礎(chǔ)好的已經(jīng)看出來了。

我的data是reactive修飾的,是響應(yīng)式數(shù)據(jù),但是,我居然直接將請求回來的數(shù)據(jù)賦值給了`data`,于是原對象被覆蓋,失去了響應(yīng)性。

于是,它成為了一個平凡的數(shù)據(jù),失去了響應(yīng)性的它,不再被`實時`的關(guān)注,子組件也不會第一時間的注意它,它只能循規(guī)蹈矩,只有父組件發(fā)生變動,它的存在才會被注意一下。

所以!為了不讓它平凡,我是使用了ref!!!

<template>
    <Child :data='data'></Child>
</template>

<script setup>
let data = ref([])
let flag= ref(false)

onMounted(()=>{
    請求.then(res=>{
        data.value = res.data
    })
})
</script>

哦,好奇妙,.value后它依然保持著響應(yīng)性,傳到子組件的它被'實時'的關(guān)注著,一旦有了變化有了值,馬上就會被公之于眾,渲染在頁面上,good!

事情到這里似乎就解決了

reactive

但是!我就是想用reactive,即使平凡,我也想要保持初心,所以我尋求了朋友的幫助

<template>
    <Child :data='data'></Child>
</template>

<script setup>
let friend = reactive({
    data:[]
})
let flag= ref(false)

onMounted(()=>{
    請求.then(res=>{
        friend.data= res.data
    })
})
</script>

哦,在朋友的擁護(hù)與支持下,data成為了屬性。

問題解決,proxy會監(jiān)聽對象屬性的變化,即使屬性改變,依然會保持整個對象的響應(yīng)性。

總結(jié)

原因:數(shù)據(jù)失去了響應(yīng)性,不管你用的ref還是reactive,要認(rèn)真查看,數(shù)據(jù)是否失去了響應(yīng)性

3個解決方案:

  • 1.v-if
  • 2.ref
  • 3.reactive包裝

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

相關(guān)文章

  • vue使用混入定義全局變量、函數(shù)、篩選器的實例代碼

    vue使用混入定義全局變量、函數(shù)、篩選器的實例代碼

    本文主要是給大家分享利用混入mixins來實現(xiàn)全局變量和函數(shù)。這種方法優(yōu)點(diǎn)是ide會有方法、變量、篩選器提示。對vue中 利用混入定義全局變量、函數(shù)、篩選器的相關(guān)知識感興趣的朋友,跟隨小編一起看看吧
    2019-07-07
  • Vue項目部署上線全過程記錄(保姆級教程)

    Vue項目部署上線全過程記錄(保姆級教程)

    vue項目開發(fā)完畢后,我們需要將項目打包上線,同時我們希望可以在本地預(yù)覽生產(chǎn)環(huán)境項目,下面這篇文章主要給大家介紹了關(guān)于Vue項目部署上線的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • vue項目中按需引入element-ui的正確實現(xiàn)方法

    vue項目中按需引入element-ui的正確實現(xiàn)方法

    這篇文章主要介紹了vue項目中按需引入element-ui的正確實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue使用canvas實現(xiàn)圖片壓縮上傳

    Vue使用canvas實現(xiàn)圖片壓縮上傳

    這篇文章主要為大家詳細(xì)介紹了Vue使用canvas實現(xiàn)圖片壓縮上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Ant?Design-vue?解決input前后空格問題(推薦)

    Ant?Design-vue?解決input前后空格問題(推薦)

    最近做項目遇到這樣一個問題輸入框不允許有前后空格但字符中間可以有空格,怎么解決這個問題呢,接下來小編把a(bǔ)nt?Design-vue?解決input前后空格問題的實現(xiàn)代碼分享給大家,感興趣的朋友一起看看吧
    2022-10-10
  • 解決vue一個頁面中復(fù)用同一個echarts組件的問題

    解決vue一個頁面中復(fù)用同一個echarts組件的問題

    這篇文章主要介紹了解決vue一個頁面中復(fù)用同一個echarts組件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue項目中通過路由守衛(wèi)實現(xiàn)自動取消Pending請求功能

    Vue項目中通過路由守衛(wèi)實現(xiàn)自動取消Pending請求功能

    現(xiàn)代Web應(yīng)用中,當(dāng)用戶在頁面間快速切換時,常常會遇到一些正在進(jìn)行的網(wǎng)絡(luò)請求繼續(xù)執(zhí)行的問題,本文將介紹如何在Vue項目中通過路由守衛(wèi)實現(xiàn)自動取消pending請求的功能,提高應(yīng)用的性能和用戶體驗,需要的朋友可以參考下
    2026-04-04
  • element使用自定義icon圖標(biāo)的詳細(xì)步驟

    element使用自定義icon圖標(biāo)的詳細(xì)步驟

    前端經(jīng)常會用到UI提供的各種圖表,推薦阿里的圖標(biāo)庫,下面這篇文章主要給大家介紹了關(guān)于element使用自定義icon圖標(biāo)的詳細(xì)步驟,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Vue實現(xiàn)搖一搖功能(兼容ios13.3以上)

    Vue實現(xiàn)搖一搖功能(兼容ios13.3以上)

    這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)搖一搖功能,兼容ios13.3以上,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • uniapp?vue與nvue輪播圖之輪播圖組件的示例代碼

    uniapp?vue與nvue輪播圖之輪播圖組件的示例代碼

    這篇文章主要介紹了uniapp?vue與nvue輪播圖輪播圖組件的實例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12

最新評論

达孜县| 乌审旗| 牟定县| 砀山县| 崇州市| 观塘区| 集安市| 三河市| 吉安县| 夏邑县| 广水市| 乐平市| 青田县| 淮北市| 武乡县| 库伦旗| 额敏县| 彰化市| 宁南县| 米易县| 延津县| 鹿邑县| 西乌珠穆沁旗| 金山区| 乳源| 乃东县| 临朐县| 望江县| 亚东县| 喀喇沁旗| 香港| 汕尾市| 博野县| 互助| 张家界市| 泰州市| 子长县| 珠海市| 峨边| 海门市| 邵阳市|