Русский
Открыть в Telegram

ПостUX++ и DX++ с движками синхронизации

31 января 2025
З
Заметки про React
Ссылка
нажмите — покажем
UX++ и DX++ с движками синхронизации В своем блоге Карл Ассманн объясняет почему сложно инвалидировать запросы и реализовать оптимистичный UI с React Query. Сложность в инвалидации запросов заключается в том, что надо знать какие запросы нужно инвалидировать и когда. Если инвалидировать лишние ключи, то будут выполняться лишние запросы в сети. Также нужно знать все ключи, которые надо инвалидировать, иначе часть UI будет продолжать показывать устаревшие данные. Для эффективной реализации оптимистичного UI нужно знать все связанные ключи запроса и влияние каждой мутации на них. Пример реализации оптимистичного UI: const mutation = useMutation(addTodo, { onMutate: async (newTodo) => { const previousTodos = queryClient.getQueryData(...); queryClient.setQueryData([newTodo, ...previousTodos]); return { previousTodos }; }, onError: (_, _, context) => { queryClient.setQueryData(["todos"], context.previousTodos); }, onSettled: () => { queryClient.invalidateQueries(["todos"]); }, }); В оптимистичном UI также возникают сложности при добавлении нового запроса. Нужно связать существующие мутации, убедиться, что они инвалидируют этот запрос или вставляют правильные данные для оптимистичного UI. По мнению автора, основная проблема клиентских приложений в том, что они работают с состоянием на сервере. Бывает нужно выполнить слишком много запросов, из-за которых пользователям приходится ждать, прежде чем они смогут продолжить. В качестве решения проблемы автор предлагает обратить внимание на движки синхронизации, например Replicache. Основная идея заключается в том, чтобы иметь локальную копию данных на клиенте. Компоненты подписываются на локальные данные или изменяют их, в то время как движок синхронизирует изменения с сервером в фоновом режиме. Replicache работает только на клиенте, предоставляет методы подписки и мутации и взаимодействует с конечными точками API, позволяя вам контролировать ваш сервер, вашу базу данных и вашу бизнес-логику. Пример подписки: function Todos() { const todos = useSubscribe(rep, async (tx) => { return await tx.scan({prefix: "todo/"}).toArray(); }); return ( <ul> {todos.map(todo => ( <li key={todo.id}>✅ {todo.title}</li> ))} </ul> ); } https://www.carlassmann.com/blog/improve-ux-dx-with-sync-engines
32 · 3.1K ·

Рядом в ленте

ЗЗаметки про ReactДелаем использование FormData типобезопасным Новый хук useActionState в React 19 позволяет обрабатывать отправку данных в формах, пример: export default functioЗЗаметки про Reactreact-scan для поиска проблем производительности Вышла библиотека react-scan для поиска проблем производительности и устранения медленного рендера приложения. В
это сообщение
ЗЗаметки про ReactCreate React App устарел Create React App был одним из основных инструментов для старта приложения в 2017-2021 году. Сейчас он официально устарел и в Readme рекЗЗаметки про ReactПочему я не буду использовать JSDOM Артем Захарченко предлагает перестать пользоваться библиотекой JSDOM при написании тестов компонентов. JSDOM эмулирует брауз
ЗЗаметки про ReactЗаметки про React@ru_react_notes · канал · Технологии
3 412подписчиков491постов в индексе
Лента площадки Открыть в Telegram

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Границы индекса · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем