您好,登錄后才能下訂單哦!
這篇文章主要講解了“Vue中的$forceUpdate()怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue中的$forceUpdate()怎么使用”吧!
在Vue官方文檔中指出,$forceUpdate具有強制刷新的作用。
那在vue框架中,如果data中有一個變量:age,修改他,頁面會自動更新。
但如果data中的變量為數組或對象,我們直接去給某個對象或數組添加屬性,頁面是識別不到的
<template> <p>{{userInfo.name}}</p> <button @click="updateName">修改userInfo</button> </template>
<script> data(){ return{ userInfo:{name:'小明'} } }, methods:{ updateName(){ this.userInfo.name='小紅' } } </script>
在updateName函數中,我們嘗試給userInfo對象修改值,發現頁面其實并沒有變化
methods:{ updateName(){ this.userInfo.name='小紅'//在此時,確實已經將userInfo對象修改完成 console.log(this.userInfo.name);//輸出結果: 小紅 this.$forceUpdate();//在這里,強制刷新之后,頁面的結果變為'小紅' } }
methods:{ updateName(){ this.$set('userInfo',name,'小紅'); } }
在官方文檔上僅僅有這一句話
迫使 Vue 實例重新渲染。注意它僅僅影響實例本身和插入插槽內容的子組件,而不是所有子組件。
我的理解是,所謂重新渲染,僅僅是指重新渲染DOM并與原有的DOM做code diff。對于有變更的,渲染到頁面。結合官方解釋,可以確認有兩點不會發生:
不會重新觸發生命周期鉤子函數,比如mounted
不會渲染子組件的更新,即使子組件的props發生改變了。
既然如此,什么場景下會需要使用呢?
我們知道,在Vue中,響應數據發生改變后,會自動觸發更新,但有一些條件,不會觸發更新,比如數組的一些方法,或者添加data中并未提前定義的響應式數據。
舉個例子:
假設有一個列表需要渲染,我們在data中初始化了這個列表,并在mounted函數中通過fill去填充這個數組。fill這個api是不會觸發自動更新的。
<template> <div class="hello"> <div> <span v-for="(item, index) in arr" :key="index">{{ item }}</span> </div> <hello-world ref="hello" :list="arr" /> </div> </template>
<script> import HelloWorld from "@/components/HelloWorld.vue"; export default { name: "About", components: { HelloWorld, }, data() { return { arr: Array(4), }; }, mounted() { this.arr.fill(0); setTimeout(() => { this.$forceUpdate(); }, 3000); setTimeout(() => { this.$refs.hello.$forceUpdate();; }, 5000); },
在上面的示例中,頁面會在3秒后才看到更新,子組件會在5秒后看到更新。這也就解釋了forceUpdate的含義。
即強制更新因某些原因并未渲染到頁面的,已經改變的,應該被渲染到頁面的數據。
他所影響的僅僅是【觸發render函數生成DOM -> 與原DOM 進行diff -> 更新視圖】這個過程。
感謝各位的閱讀,以上就是“Vue中的$forceUpdate()怎么使用”的內容了,經過本文的學習后,相信大家對Vue中的$forceUpdate()怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。