flushSync¶
Использование flushSync
является необычным и может ухудшить производительность вашего приложения.
flushSync
позволяет вам заставить React синхронно промывать любые обновления внутри предоставленного обратного вызова. Это гарантирует, что DOM будет обновлен немедленно.
1 |
|
Описание¶
flushSync(callback)
¶
Вызовите flushSync
, чтобы заставить React промыть все ожидающие работы и синхронно обновить DOM.
1 2 3 4 5 |
|
В большинстве случаев можно обойтись без flushSync
. Используйте flushSync
в крайнем случае.
Параметры
callback
: Функция. React немедленно вызовет этот обратный вызов и синхронно прошьет все содержащиеся в нем обновления. Он также может прошить все ожидающие обновления, или эффекты, или обновления внутри эффектов. Если обновление приостанавливается в результате этого вызоваflushSync
, фалбэки могут быть показаны заново.
Возврат
flushSync
возвращает undefined
.
Предостережения
flushSync
может значительно снизить производительность. Используйте его осторожно.flushSync
может заставить ожидающие границы приостановки показать свое состояниеотката
.flushSync
может запускать отложенные эффекты и синхронно применять все содержащиеся в них обновления перед возвратом.flushSync
может промывать обновления вне обратного вызова, когда это необходимо для промывки обновлений внутри обратного вызова. Например, если есть ожидающие обновления от клика, React может промыть их, прежде чем промыть обновления внутри обратного вызова.
Использование¶
Выгрузка обновлений для сторонних интеграций¶
При интеграции со сторонним кодом, таким как API браузера или библиотеки пользовательского интерфейса, может потребоваться заставить React промывать обновления. Используйте flushSync
, чтобы заставить React синхронно промывать любые обновления состояния внутри обратного вызова:
1 2 3 4 |
|
Это гарантирует, что к моменту выполнения следующей строки кода React уже обновил DOM.
Если ваше приложение использует только API React и не интегрируется со сторонними библиотеками, `flushSync не нужен.
Однако он может быть полезен при интеграции со сторонним кодом, например, с API браузеров.
Некоторые браузерные API ожидают, что результаты внутри обратных вызовов будут записаны в DOM синхронно, к концу обратного вызова, чтобы браузер мог что-то сделать с отрисованной DOM. В большинстве случаев React делает это за вас автоматически. Но в некоторых случаях может потребоваться принудительное синхронное обновление.
Например, API браузера onbeforeprint
позволяет изменять страницу непосредственно перед открытием диалога печати. Это полезно для применения пользовательских стилей печати, которые позволяют документу лучше отображаться при печати. В примере ниже вы используете flushSync
внутри обратного вызова onbeforeprint
, чтобы немедленно "прошить" состояние React в DOM. Тогда к моменту открытия диалога печати isPrinting
отображает "да":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
Без flushSync
, когда диалог печати будет отображать isPrinting
как "нет". Это происходит потому, что React собирает обновления асинхронно и диалог печати отображается до обновления состояния.
flushSync
может значительно снизить производительность
flushSync
может значительно снизить производительность, и может неожиданно заставить ожидающие границы приостановки показать их состояние отката.
В большинстве случаев flushSync
можно избежать, поэтому используйте flushSync
в крайнем случае.
Источник — https://react.dev/reference/react-dom/flushSync