91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中的$forceUpdate()怎么使用

發布時間:2022-04-02 15:47:39 來源:億速云 閱讀:679 作者:iii 欄目:開發技術

這篇文章主要講解了“Vue中的$forceUpdate()怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue中的$forceUpdate()怎么使用”吧!

    $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,'小紅');
      }
    }

    關于$forceUpdate的一些理解

    在官方文檔上僅僅有這一句話

    迫使 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()怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    vue
    AI

    宝鸡市| 清河县| 开阳县| 丁青县| 白河县| 平远县| 庐江县| 西乌珠穆沁旗| 四川省| 石棉县| 北辰区| 绥芬河市| 二连浩特市| 大田县| 白朗县| 潞城市| 大庆市| 鲜城| 永德县| 驻马店市| 布拖县| 连江县| 泉州市| 方正县| 昌黎县| 古交市| 开远市| 上蔡县| 蕲春县| 友谊县| 重庆市| 仲巴县| 兴安盟| 宁津县| 台北县| 福安市| 仙桃市| 大荔县| 彰武县| 溧阳市| 东乌珠穆沁旗|