Skip to content
Mithril.js 2
Main Navigation 指南API

繁體中文

English
简体中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

繁體中文

English
简体中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

外觀

Sidebar Navigation

API

核心 API

m(selector, attributes, children)

render(element, vnodes)

mount(root, component)

route(root, defaultRoute, routes)

request(options)

parseQueryString(string)

buildQueryString(object)

buildPathname(object)

parsePathname(string)

trust(html)

fragment(attrs, children)

redraw()

censor(object, extra)

可選 API

stream()

指南

本頁導覽

redraw() ​

描述 ​

在應用程式資料層變更後,更新 DOM 樹。

如果資料是在 Mithril.js 視圖中定義的事件處理器的執行上下文中修改,或者在使用 m.request 時在請求完成後修改,則不需要呼叫 m.redraw()。基於 m.redraw() 的 自動重繪 機制會自動處理這些情況。

您需要在 setTimeout/setInterval/requestAnimationFrame 回呼函式,或來自第三方函式庫的回呼函式中呼叫 m.redraw()。

函式簽章 ​

m.redraw()

參數類型必填描述
回傳值無回傳值

靜態方法 ​

m.redraw.sync ​

m.redraw.sync()

參數類型必填描述
回傳值無回傳值

運作原理 ​

當 Mithril.js 之外的回呼函式執行時,您需要通知 Mithril.js 的渲染引擎進行重新渲染。外部回呼函式可能包括 setTimeout/setInterval/requestAnimationFrame 回呼函式、WebSocket 函式庫的回呼函式、jQuery 外掛中的事件處理器,以及第三方 XHR 請求回呼函式等。

要觸發重繪,請調用 m.redraw()。請注意,m.redraw() 只有在使用 m.mount 或 m.route 時才會生效。如果透過 m.render 渲染,則應使用 m.render 進行重新渲染。

m.redraw() 總是觸發非同步重新渲染,而 m.redraw.sync() 則觸發同步重新渲染。m.redraw() 與 window.requestAnimationFrame() 綁定,因此通常最多每秒觸發 60 次。如果您的顯示器更新率更高,則可能會更快觸發。

m.redraw.sync() 主要用於讓影片在 iOS 中正常播放。這僅在響應用戶觸發的事件時才會生效。它有一些注意事項:

  • 您不應從元件的 生命週期方法 或 view() 方法中調用 m.redraw.sync()。這樣做會導致未定義的行為(在可能的情況下,它會拋出錯誤)。
  • 從事件處理器調用的 m.redraw.sync() 可能會導致在事件冒泡階段修改 DOM 樹。根據舊 DOM 樹和新 DOM 樹的結構,事件可能會在新樹中完成冒泡階段,並觸發不必要的處理器。
  • 它不會進行節流。每次調用 m.redraw.sync() 都會立即導致每個使用 m.mount() 或 m.route() 註冊的根元件執行一次 m.render() 調用。

m.redraw() 沒有上述任何問題,您可以從任何地方調用它。

Pager
上一頁fragment(attrs, children)
下一頁censor(object, extra)

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors

https://mithril.js.org/redraw.html

以 MIT 授權條款 發布。

版權所有 (c) 2024 Mithril Contributors