Vue項目中使用setTimeout存在的潛在問題及解決
使用setTimeout存在的潛在問題
在開發(fā)項目中遇到這樣的序曲,點擊按鈕彈框,每次進入的時候都需要默認選中Android,
這個時候就遇到了一個小坑,當用戶點擊彈框后,選擇iOS,再點擊cancel或者OK,樓主在開發(fā)的時候,點擊cancel按鈕,執(zhí)行下面代碼
this.showDialog = false; // 關閉彈框 this.createForm.platform = "Android"; // 重置下拉框的默認選擇項為Android this.createForm.secureCoreVersion = ""; // 清空輸入框的東西
然后
這幾行代碼在邏輯上看是正確的邏輯,但是實際頁面上顯示的樣子,卻不一樣,點擊cancel按鈕的時候,彈框關閉,但是彈框會在關閉前的一刻,下拉框選中的iOS 會閃一下,變成Android,體驗不是很好,于是,樓主想到了使用setTimeout來解決問題,遂寫成如下代碼
this.showDialog = false; setTimeout(() => { this.createForm.platform = "Android"; this.createForm.secureCoreVersion = ""; }, 500);
把 清空彈框里面表單的東西放在了定時器里面,這樣就能避免在點擊關閉按鈕的時候,下拉框選項閃一下,變成默認選項Android的問題。
但是,過了1天,有個同事跑過來跟我說,樓主的寫法存在一定的潛藏風險,那就是使用了setTimeout定時器來處理這個問題,
他的回答是:
定時器一般只能用在寫動畫里面,日常的業(yè)務邏輯層代碼盡量不要使用定時器,因為定時器雖然表面上能解決這個問題,但是,如果用戶在設置的500毫秒以內再次點擊cancel按鈕,就會出現(xiàn)問題,定時器的原理實際上就是把js執(zhí)行的這段代碼拿到一個宏任務里面,最后執(zhí)行
于是乎,p7水平的同事,跟我這樣說,可以換一種思路,
可以在點擊彈框彈出來的時候把彈框里面的選項都進行重置,不需要在關閉彈框的時候進行重置,其實是一個逆向思維的問題,在一開始點擊彈框打開的時候直接重置參數(shù),這樣就能巧妙的繞過在關閉彈框出現(xiàn)的問題通過elementUI dialog 組件自帶的 closed 回調函數(shù)來解決問題
elementUI 的官網(wǎng)里面關于dialog彈框,封裝了在關閉動畫結束時執(zhí)行的回調函數(shù),直接在這個回調函數(shù)里面執(zhí)行重置選項的邏輯就好了
上代碼
最后樓主采用的是第二種方法來解決閃現(xiàn)的問題的
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Vue3項目中優(yōu)雅實現(xiàn)微信授權登錄的方法
用戶在微信端中訪問第三方網(wǎng)頁,可以通過微信網(wǎng)頁授權機制獲取用戶的基本信息,進而實現(xiàn)所需要的業(yè)務邏輯,這篇文章主要給大家介紹了關于Vue3項目中優(yōu)雅實現(xiàn)微信授權登錄的相關資料,需要的朋友可以參考下2021-09-09el-form表單el-form-item label不換行問題及解決
這篇文章主要介紹了el-form表單el-form-item label不換行問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10vue2 router 動態(tài)傳參,多個參數(shù)的實例
下面小編就為大家?guī)硪黄獀ue2 router 動態(tài)傳參,多個參數(shù)的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11談談因Vue.js引發(fā)關于getter和setter的思考
最近因為公司的新項目決定使用Vue.js來做,但在使用的過程中發(fā)現(xiàn)了一個有趣的事情,因為發(fā)現(xiàn)的這個事情展開了一些對于getter和setter的思考,具體是什么下面通過這篇文章來一起看看吧,有需要的朋友們可以參考學習。2016-12-12vue3導入excel并解析excel數(shù)據(jù)渲染到表格中(純前端實現(xiàn))
在Vue中實現(xiàn)導出Excel有多種方式,可以通過前端實現(xiàn),也可以通過前后端配合實現(xiàn),下面這篇文章主要給大家介紹了關于vue3導入excel并解析excel數(shù)據(jù)渲染到表格中的相關資料,文中介紹的方法是純前端實現(xiàn),需要的朋友可以參考下2024-04-04