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

Vue異步請求導(dǎo)致頁面數(shù)據(jù)渲染錯誤問題解決方法示例

 更新時(shí)間:2023年09月25日 09:16:10   作者:SHQ5785  
這篇文章主要為大家介紹了Vue中異步請求導(dǎo)致頁面數(shù)據(jù)渲染錯誤問題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、場景描述

Vue項(xiàng)目優(yōu)化過程中,頁面部分通過JS調(diào)用promise返回的異步數(shù)據(jù),導(dǎo)致頁面部分始終無法加載后臺返回的數(shù)據(jù)。通過觸發(fā)其他DOM操作(例如折疊欄位的操作),后臺數(shù)據(jù)可以正常渲染展示。

處理邏輯大致如下:

<template>
	<div v-for="(items, index) in results" :key="items.itemsID">
		<span v-for="(item, index) in items.appendItems" :key="item.itemID">
			<el-button type="text" @click="handlerClick(item)">
				{{item.itemName}}
			</el-button>
		</span>
	</div>
</template>
<script>
	results.foreach((result, index, results) => {
		results[index].appendItems = []
		aysnMethods(inputParams).then(res => {
			results[index].appendItems = res.returnResults
		})
	})
</script>

二、問題分析

經(jīng)過頁面數(shù)據(jù)輸出及debugger斷點(diǎn)調(diào)試,發(fā)現(xiàn)在頁面渲染結(jié)束前,異步數(shù)據(jù)并未處理完畢,導(dǎo)致頁面數(shù)據(jù)渲染問題。

當(dāng)vue實(shí)例生成后,再次給對象賦值時(shí),并不會自動更新到視圖上去; 當(dāng)我們?nèi)タ?code>vue文檔的時(shí)候,會發(fā)現(xiàn)有這么一句話:如果在實(shí)例創(chuàng)建之后添加新的屬性到實(shí)例上,它不會觸發(fā)視圖更新。

受 ES5 限制,Vue.js 不能檢測到對象屬性的添加或刪除,即Vue未做到臟數(shù)據(jù)檢查。因?yàn)?nbsp;Vue.js 在初始化實(shí)例時(shí)將屬性轉(zhuǎn)為 getter/setter,所以屬性必須在 data 對象上才能讓 Vue.js 轉(zhuǎn)換它,才能讓它是響應(yīng)的。

三、解決措施

通過以上問題分析,可通過v-if控制頁面渲染、銷毀邏輯,在異步方法請求前銷毀相應(yīng)數(shù)據(jù),異步方法請求成功后新建相應(yīng)數(shù)據(jù)段。
代碼如下:

<template>
	<div v-if="showForm">
		<div v-for="(items, index) in results" :key="items.itemsID">
			<span v-for="(item, index) in items.appendItems" :key="item.itemID">
				<el-button type="text" @click="handlerClick(item)">
					{{item.itemName}}
				</el-button>
			</span>
		</div>
	</div>
</template>
<script>
	data(): {
		return {
			showForm: false
		}
	}
	results.foreach((result, index, results) => {
		results[index].appendItems = []
		vm.showForm = false
		aysnMethods(inputParams).then(res => {
			results[index].appendItems = res.returnResults
			vm.showForm = false
		})
	})
</script>

后經(jīng)過實(shí)踐發(fā)現(xiàn),另一種解決方式可應(yīng)用this.$set()實(shí)現(xiàn)。

拓展閱讀

Vue進(jìn)階Vue.set()和this.$set()介紹

Vue進(jìn)階給對象動態(tài)添加屬性和值

以上就是Vue異步請求導(dǎo)致頁面數(shù)據(jù)渲染錯誤問題解決方法示例的詳細(xì)內(nèi)容,更多關(guān)于Vue異步請求頁面渲染錯誤的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

茂名市| 尼木县| 治多县| 敖汉旗| 富锦市| 延边| 四平市| 昭苏县| 昭苏县| 铁岭市| 深圳市| 区。| 肇庆市| 遵义县| 锡林浩特市| 东兰县| 长泰县| 泰安市| 乐东| 荣成市| 崇文区| 泾阳县| 郯城县| 汉源县| 苍南县| 久治县| 班戈县| 台山市| 清河县| 富民县| 巴林左旗| 阳泉市| 自贡市| 盖州市| 镇康县| 金门县| 陆良县| 手游| 永安市| 江安县| 鹤岗市|