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

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

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

一、場景描述

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

受 ES5 限制,Vue.js 不能檢測到對象屬性的添加或刪除,即Vue未做到臟數(shù)據(jù)檢查。因為 Vue.js 在初始化實例時將屬性轉(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)過實踐發(fā)現(xiàn),另一種解決方式可應(yīng)用this.$set()實現(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)文章

最新評論

会同县| 怀安县| 宣威市| 大田县| 玛纳斯县| 阿瓦提县| 夏邑县| 游戏| 通化市| 兰西县| 沅江市| 漳州市| 珲春市| 彩票| 蒙城县| 雅安市| 台前县| 榆林市| 建昌县| 安泽县| 丹江口市| 南郑县| 宕昌县| 富源县| 馆陶县| 海口市| 衡山县| 兰西县| 海安县| 武鸣县| 海淀区| 渭南市| 北川| 阳曲县| 改则县| 敦化市| 汶川县| 遂溪县| 丹阳市| 阿尔山市| 江油市|