redraw()
Описание
Обновляет DOM после изменения данных в приложении.
Вам не нужно вызывать эту функцию, если данные изменяются в контексте обработчика событий, определенного в представлении Mithril.js, или после завершения запроса, выполненного с помощью m.request
. Система автоматической перерисовки, основанная на m.redraw()
, автоматически позаботится об этом.
Вам нужно вызывать эту функцию в колбэках setTimeout
/setInterval
/requestAnimationFrame
или колбэках сторонних библиотек.
Сигнатура
m.redraw()
Аргумент | Тип | Обязательный | Описание |
---|---|---|---|
returns | Возвращает: ничего |
Статические методы
m.redraw.sync
m.redraw.sync()
Аргумент | Тип | Обязательный | Описание |
---|---|---|---|
returns | Возвращает: ничего |
Как это работает
Если колбэки выполняются вне Mithril.js, необходимо уведомить механизм рендеринга Mithril.js о необходимости перерисовки. Внешние колбэки могут быть колбэками setTimeout
/setInterval
/requestAnimationFrame
, колбэками библиотек для работы с веб-сокетами, обработчиками событий в плагинах 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. Это поведение работает только в ответ на события, инициированные пользователем. С ним связано несколько ограничений:
- Не следует вызывать
m.redraw.sync()
из метода жизненного цикла или методаview()
компонента. Это приведет к непредсказуемому поведению и может вызвать ошибку. m.redraw.sync()
, вызванный из обработчика событий, может привести к изменению DOM во время всплытия события. В зависимости от структуры старого и нового деревьев DOM, событие может завершить фазу всплытия в новом дереве и вызвать не те обработчики, которые ожидались.- Он не подвергается троттлингу (ограничению частоты вызовов). При каждом вызове
m.redraw.sync()
немедленно вызываетсяm.render()
для каждого корневого элемента, зарегистрированного черезm.mount()
илиm.route()
.
В отличие от m.redraw.sync()
, у m.redraw()
нет этих ограничений. Его можно вызывать в любом месте кода.