Pull to refresh

Comments 5

Я вот как раз и затеял Fusor чтобы можно было явно контролировать обновления хоть пакетные, хоть одиночные, также можно самому рендерить и обновлять сложные участки дом асинхронно или синхронно, также диффить сложные структуры там где это важно.
Реакт это черная коробочка которая оптимизирована на средний/общий по больнице результат. Когда нужна максимальная оптимизация, то он уже не подходит.

Важно! useSyncExternalStore лучше использовать в библиотеках, а не в пользовательском коде приложения.

Это почему?

Потому что большинство кейсов покрывается стандартными хуками и использование данного будет оверхедом. Хотя есть кейсы, когда он действительно необходим. Например, когда нужно подписаться на изменения значения браузерного API.
Короче говоря, этот хук заслуживает отдельной статьи ;)

Я понял что меня смутило. Получается у меня больше вопрос по форме. Вы пишете:

... а не в пользовательском коде приложения.

По идее, любой код, который использует реакт является по отношению к нему клиентским, а вашими словами пользовательским. Иными словами, вот пишем мы кастомный хук с котором используем useState, useCallback и получаем пользовательский код по отношению к реакту и часть внутренний библиотеки по отношению к коду, который этот хук будет использовать.

В самой документации реакта я ничего такого не видел. Там ясно написано:

When possible, we recommend using built-in React state with useState and useReducer instead. The useSyncExternalStore API is mostly useful if you need to integrate with existing non-React code.

Иными словами, речь идет о клиентском коде, который не использует реактивные состояния, которые предлагает реакт.

Таким образом, useSyncExternalStore создан для пользовательского кода, когда он рассчитан на работу с внешними состояниями.

Если правильно понял, нравится вам оопешный подход. Например, хотите использовать реакт просто как удобную прослойку для работы с домом. Теперь легко подключать такие внешние состояния используя апи самого реакта.

Оверхед, конечно, тут тоже имеет место, но само по себе это не какой-то блокер. Редакс - это тоже оверхед.

Я все это к тому, что я бы не стал менять формулировку предложенную в документации. Она более точно отражает назначение этого хука.

JS выполняет обновление DOM в одном основном потоке. Как тут получается многопоточность если react всё равно транслируется в JS?

Можно эту тему раскрыть?

Даже если ответы от сервера приходят практически одновременно JavaScript все равно выполняет код в основном потоке последовательно.

Сценарий с почти одновременными ответами

Допустим, два запроса отправлены, и серверы ответили практически одновременно. Вот что произойдет:

События в очереди: Когда ответы приходят, соответствующие им обработчики (функции, переданные в .then()) добавляются в очередь задач

Цикл событий (Event Loop): Цикл событий JavaScript постоянно проверяет, есть ли задачи в очереди, и если есть, выполняет их одну за другой.

Последовательно

Sign up to leave a comment.

Information

Website
surf.ru
Registered
Founded
Employees
201–500 employees
Location
Россия