redraw()
Description
アプリケーションのデータ層に変更があった後、DOM を更新します。
Mithril.js のビュー内で定義されたイベントハンドラーの実行コンテキストでデータが変更された場合、または m.request
使用時のリクエスト完了後にデータが変更された場合は、m.redraw()
を明示的に呼び出す必要はありません。自動再描画システム(m.redraw()
を基盤としています)が自動的に処理します。
setTimeout
、setInterval
、requestAnimationFrame
のコールバック、またはサードパーティライブラリのコールバック内では、m.redraw()
の呼び出しが必要になる場合があります。
Signature
m.redraw()
引数 | 型 | 必須 | 説明 |
---|---|---|---|
returns | 戻り値なし |
静的メンバー
m.redraw.sync
m.redraw.sync()
引数 | 型 | 必須 | 説明 |
---|---|---|---|
returns | 戻り値なし |
How it works
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()
に関連付けられているため、通常は 1 秒間に最大 60 回まで実行されます。ディスプレイのリフレッシュレートが高い場合は、より頻繁に実行されることがあります。
m.redraw.sync()
は、主に iOS でのビデオ再生を機能させるために設計されています。これはユーザー操作によってトリガーされたイベントへの応答時のみ正常に機能します。これにはいくつかの注意点があります。
- ライフサイクルメソッド またはコンポーネントの
view()
メソッドからm.redraw.sync()
を呼び出すべきではありません。この場合、動作は未定義となります (可能な場合はエラーがスローされます)。 - イベントハンドラーから呼び出された
m.redraw.sync()
は、イベントがバブリングしている間に DOM が変更される可能性があります。古い DOM ツリーと新しい DOM ツリーの構造によっては、イベントが新しいツリー上でバブリングフェーズを終了し、意図しないハンドラーが実行される可能性があります。 - スロットリングは行われません。
m.redraw.sync()
を 1 回呼び出すと、m.mount()
またはm.route()
で登録されたルートごとに、即座に 1 回のm.render()
呼び出しが発生します。
m.redraw()
にはこれらの問題はありません。どこからでも安全に呼び出すことができます。