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

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

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

一、問題描述

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

  • 方案一:使用watch監(jiān)聽對(duì)象屬性變化
<template>
    <div>
        <h3>{{userInfo.name}}</h3>
        <button @click="changeUserName">點(diǎn)擊我改變用戶名</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è)異步請(qǐng)求修改用戶名
            const newUserName = '李四';
            this.userInfo.name = newUserName;
        }
    }
}
</script>
  • 方案二:使用this.$set()強(qiáng)制更新響應(yīng)式變量
// 定義數(shù)據(jù)對(duì)象:
obj: { name: "小明", age: 18, },       

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

示例如下:

<template>
    <div>
        <h3>{{initList.message}}</h3>
        <button @click="changeMessage">點(diǎn)擊我改變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()強(qiáng)制性重新渲染
methods: {
    // 在某些情況下需要強(qiáng)制重新渲染組件
    forceRerender() {
        // 調(diào)用 $forceUpdate()方法
        this.$forceUpdate();
    }
}

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

二、解決方案

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

// 為確保視圖更新,先將數(shù)據(jù)重新賦值給一個(gè)變量,然后再清空
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í),數(shù)據(jù)更新的同時(shí),視圖也會(huì)同步更新。

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

以上,希望對(duì)大家有幫助!

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

相關(guān)文章

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

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

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

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

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

    vue遮罩層如何阻止?jié)L動(dòng)

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

    Vue項(xiàng)目打包優(yōu)化實(shí)踐指南(推薦!)

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

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

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

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

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

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

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

    vue實(shí)現(xiàn)頁面加載動(dòng)畫效果

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

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

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

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

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

最新評(píng)論