亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue數(shù)據(jù)更新視圖未更新的幾種解決方案

 更新時間:2024年02月18日 08:56:15   作者:小蹦跶兒  
本文主要介紹在vue項目中,遇到數(shù)據(jù)更新但視圖不更新的情況時,無法使用watch監(jiān)聽、無法使用this.$set方法,同時使用this.$forceUpdate()無效時,所使用的解決方案,需要的朋友可以參考下

一、問題描述

在Vue項目中,有時我們會遇到數(shù)據(jù)更新了,但是視圖沒有更新的情況,這是因為Vue使用的是異步更新的方式,如果數(shù)據(jù)變化時視圖沒有立即響應(yīng),則一般都會考慮使用以下幾種解決方案:

  • 方案一:使用watch監(jiān)聽對象屬性變化
<template>
    <div>
        <h3>{{userInfo.name}}</h3>
        <button @click="changeUserName">點擊我改變用戶名</button>
    </div>
</template>

<script>
export default {
    data(){
        return {
            userInfo: {
                name: '張三',
                age: 16
            }
        }
    },
    watch:{
        'userInfo.name': {
            handler(newValue, oldValue) {
              console.log('用戶名變化了,新值:' + newValue + ',舊值:' + oldValue);
            },
            immediate: true,
            deep: true
        }
    },
    methods:{
        changeUserName(){
            // 假設(shè)異步請求修改用戶名
            const newUserName = '李四';
            this.userInfo.name = newUserName;
        }
    }
}
</script>
  • 方案二:使用this.$set()強制更新響應(yīng)式變量
// 定義數(shù)據(jù)對象:
obj: { name: "小明", age: 18, },       

// 基本語法:
this.$set(需要改變的對象,"需要改變的對象屬性","新值")

示例如下:

<template>
    <div>
        <h3>{{initList.message}}</h3>
        <button @click="changeMessage">點擊我改變message值</button>
    </div>
</template>

<script>
export default {
    data(){
        return {
            initList: {
                message: 'hello'
            },
        }
    },
    methods:{
        changeMessage(){
            // 假設(shè)是異步調(diào)用獲取到了新的message值
            const newMessage='world';
            this.$set(this.initList, 'message', newMessage);
        }
    }
}
</script>
  • 方案三:使用this.$forceUpdate()強制性重新渲染
methods: {
    // 在某些情況下需要強制重新渲染組件
    forceRerender() {
        // 調(diào)用 $forceUpdate()方法
        this.$forceUpdate();
    }
}

但是,在項目中,如果以上方案均無效,比如由于無法使用watchthis.$set()實現(xiàn)所需功能,或者使用后會使代碼變得更復(fù)雜、冗余;同時層級太多或其他原因?qū)е?code>this.$forceUpdate()也不起作用,那么還有什么方案可以解決視圖不更新的問題呢?

二、解決方案

為確保視圖更新,可以先將數(shù)據(jù)賦值后再清空,最后在this.$nextTick()中處理數(shù)據(jù),并重新賦值。代碼示例如下:

// 為確保視圖更新,先將數(shù)據(jù)重新賦值給一個變量,然后再清空
const details = this.detailsList;
this.detailsList = [];

// 處理數(shù)據(jù),并重新賦值
this.$nextTick(() => {
    // 處理數(shù)據(jù)
    const detailsList = this.formatList(details, data.playCourseChapterId);
    // 重新賦值
    this.detailsList = Object.assign([], detailsList);
})

這時,數(shù)據(jù)更新的同時,視圖也會同步更新。

備注:
我這邊的項目中,是因為層級循環(huán)太多,導(dǎo)致以上三種方案均不起作用。只有最后這種方案可以解決視圖不更新的問題。

以上,希望對大家有幫助!

到此這篇關(guān)于Vue數(shù)據(jù)更新視圖未更新的幾種解決方案的文章就介紹到這了,更多相關(guān)Vue數(shù)據(jù)更新視圖未更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue 組件參數(shù)校驗與非props特性的方法

    Vue 組件參數(shù)校驗與非props特性的方法

    這篇文章主要介紹了Vue 組件參數(shù)校驗與非props特性的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 探索Vue如何高效構(gòu)建可復(fù)用組件

    探索Vue如何高效構(gòu)建可復(fù)用組件

    Vue.js作為現(xiàn)代前端開發(fā)中的佼佼者,其組件系統(tǒng)是構(gòu)建高效、靈活和可擴展用戶界面的關(guān)鍵,本文帶大家深度探索?Vue.js?組件的核心奧義,感興趣的小伙伴可以了解下
    2024-12-12
  • vue遮罩層如何阻止?jié)L動

    vue遮罩層如何阻止?jié)L動

    這篇文章主要介紹了vue遮罩層如何阻止?jié)L動,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue項目打包優(yōu)化實踐指南(推薦!)

    Vue項目打包優(yōu)化實踐指南(推薦!)

    如果引入的庫眾多,那么vendor.js文件體積將會相當(dāng)?shù)拇?影響首開的體驗,這篇文章主要給大家介紹了關(guān)于Vue項目打包優(yōu)化實踐的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Vue實現(xiàn)簡單圖片切換效果

    Vue實現(xiàn)簡單圖片切換效果

    這篇文章主要為大家詳細(xì)介紹了Vue實現(xiàn)簡單圖片切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Vue3之狀態(tài)管理器(Pinia)詳解及使用方式

    Vue3之狀態(tài)管理器(Pinia)詳解及使用方式

    這篇文章主要介紹了Vue3之狀態(tài)管理器(Pinia)詳解及使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決

    VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決

    這篇文章主要介紹了VueCli生產(chǎn)環(huán)境打包部署跨域失敗的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • vue實現(xiàn)頁面加載動畫效果

    vue實現(xiàn)頁面加載動畫效果

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)頁面加載動畫效果,vue頁面出現(xiàn)正在加載的初始頁面與實現(xiàn)動畫效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • vue連接本地服務(wù)器的實現(xiàn)示例

    vue連接本地服務(wù)器的實現(xiàn)示例

    本文主要介紹了vue連接本地服務(wù)器的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • vue實現(xiàn)信息管理系統(tǒng)

    vue實現(xiàn)信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05

最新評論