微信小程序同一個方法內部多次 setData 無效解決方法


近期我在進行微信小程序開發的時候,遇到了一個函數需要多次 setData
setData 進行完畢后,通過 console.log( this ) 來查看數據,發現數據是已經更新成功了
但是頁面卻沒有渲染出結果來
因此推測可能是因為多次執行 setData,加上本身執行的操作比較復雜,導致小程序頁面沒能反應過來。

解決方法

后來通過定義一個對象,把所有要 setData 的數據都存放進對象里面,等執行的差不多的時候再一次性通過 setData 方法把數據更新過去

let setData: any = {}	// 這個就是存放將要 setData 數據的對象
let start_time = ""
let end_time = ""

// 判斷開始和結束顯示的時間
if (s_hour >= 0 && s_hour < 6) {
    start_time = '0:00'
    s_hour_head = '00:00:00'
} else if (s_hour >= 6 && s_hour < 12) {
    start_time = '6:00'
    s_hour_head = '06:00:00'
} else if (s_hour >= 12 && s_hour < 18) {
    start_time = '12:00'
    s_hour_head = '12:00:00'
} else if (s_hour >= 18 && s_hour < 24) {
    start_time = '18:00'
    s_hour_head = '18:00:00'
}

if (e_hour >= 0 && e_hour < 6) {
    end_time = '6:00'
} else if (e_hour >= 6 && e_hour < 12) {
    end_time = '12:00'
} else if (e_hour >= 12 && e_hour < 18) {
    end_time = '18:00'
} else if (e_hour >= 18 && e_hour < 24) {
    end_time = '0:00'
}


/** 
 * 計算灰色進度條的長度
 * 6 個小時的間距,時間戳為 21600000
 * 因此灰色進度條的區間一定是 21600000 的倍數
 * 用 dur_time / 21600000 並向上取整即可
 */

// 計算灰色進度條開始的時間戳
let s_hour_head_tmp = new Date(new Date(this.start_task_time).toLocaleDateString().replace(/\//g, '-') + ' ' + s_hour_head).valueOf()

// 計算灰色進度條的總長度
let total_dur_time = Math.ceil(dur_time / 21600000) * 21600000

// 計算橙色進度條開始的時間戳
let s_hour_det_tmp = new Date(this.start_task_time).valueOf()


/** 這里把所有要設置的數據放進 setData 對象里面 */
setData['task.task_detail.start_time'] = start_time
setData['task.task_detail.end_time'] = end_time
setData["time_progress_width"] = Math.ceil(dur_time / total_dur_time)
setData["time_progress_left"] = (s_hour_det_tmp - s_hour_head_tmp) / total_dur_time * 100

// 最后一起把數據一次性 setData 進去
this.setData(setData)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM