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