Query Key Factory 🏭
Останнім часом у нашому проєкті активно використовуємо Tanstack Query. Загалом, багато продуктів Tanstack виглядають дуже цікаво. Але сьогодні хочемо поговорити саме про Query, а точніше — про
Все наче доволі просто - ключ до наших даних. Ми завжди прописували його прямо в
Якщо ж у нас є окремий хук для оновлення, після успішного завершення можна "змусити"
При виклику
Схожа ситуація виникає, коли ви викликаєте
Як це можна покращити? Одне з рішень - створювати та зберігати
👉 Відкрити посилання
#library
Останнім часом у нашому проєкті активно використовуємо Tanstack Query. Загалом, багато продуктів Tanstack виглядають дуже цікаво. Але сьогодні хочемо поговорити саме про Query, а точніше — про
queryKey
.Все наче доволі просто - ключ до наших даних. Ми завжди прописували його прямо в
useQuery
:const usePokemon = (id: string) =>
useQuery({
queryKey: ["pokemons", id],
queryFn: () => PokemonService.getById(id),
})
Якщо ж у нас є окремий хук для оновлення, після успішного завершення можна "змусити"
useQuery
перевантажити дані за певним ключем:const useUpdatePokemon = (id: string) => {
const client = useQueryClient()
return useMutation({
mutationFn: (name: string) => PokemonService.update(id, { name }),
onSuccess: () => {
client.invalidateQueries({ queryKey: ['pokemons', id] })
},
})
}
При виклику
invalidateQueries
потрібно передати queryKey
. Якщо ми хочемо оновити конкретного покемона, потрібно вказати той самий ключ.Схожа ситуація виникає, коли ви викликаєте
prefetchQuery
у серверній компоненті, щоб швидко завантажити дані для користувача.Як це можна покращити? Одне з рішень - створювати та зберігати
queryKey
у певному обʼєкті. На сторінці Community Projects ми знайшли бібліотеку @lukemorales/query-key-factory
. Вона містить кілька допоміжних функцій, які допоможуть організувати параметри для useQuery
.👉 Відкрити посилання
#library
👍8❤3
UAParser.js 🧑💻
Іноді буває корисно дізнатися трохи більше про відвідувача вашого веб-сайту: який у нього браузер, операційна система чи навіть сам пристрій. Багато такої інформації міститься у User-Agent, і її можна отримати як на клієнті, так і з HTTP-заголовків запиту.
Але навряд чи ви захочете вручну розбирати щось таке:
Бібліотека UAParser.js допоможе вам розібрати User-Agent і витягти інформацію про браузер, процесор, пристрій та операційну систему.
👉 Відкрити посилання
#library
Іноді буває корисно дізнатися трохи більше про відвідувача вашого веб-сайту: який у нього браузер, операційна система чи навіть сам пристрій. Багато такої інформації міститься у User-Agent, і її можна отримати як на клієнті, так і з HTTP-заголовків запиту.
Але навряд чи ви захочете вручну розбирати щось таке:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Бібліотека UAParser.js допоможе вам розібрати User-Agent і витягти інформацію про браузер, процесор, пристрій та операційну систему.
👉 Відкрити посилання
#library
👍11❤1
TanStack Form 📋
Ми вже багато розповідали про продукти від TanStack — у них уже сформувалася ціла екосистема. Нещодавно вони представили ще один інструмент — TanStack Form.
Його створення мотивували відсутністю вбудованих засобів для роботи з формами у багатьох фреймворках. Через це розробникам доводиться або писати власні рішення, або використовувати сторонні бібліотеки. TanStack Form має на меті вирішити проблеми продуктивності (згадуємо
Ось простий приклад використання TanStack Form:
Завдяки використанню
Валідація підтримується як для всієї форми (через
Що одразу привертає увагу - підхід через children. Полю передається функція, а не JSX-елементи. Команда TanStack у коментарях зазначає, що render-пропси - "great". А що думаєте ви?
👉 Відкрити посилання
#library
Ми вже багато розповідали про продукти від TanStack — у них уже сформувалася ціла екосистема. Нещодавно вони представили ще один інструмент — TanStack Form.
Його створення мотивували відсутністю вбудованих засобів для роботи з формами у багатьох фреймворках. Через це розробникам доводиться або писати власні рішення, або використовувати сторонні бібліотеки. TanStack Form має на меті вирішити проблеми продуктивності (згадуємо
redux-form
), складної валідації та композиції форм.Ось простий приклад використання TanStack Form:
const form = useForm({
defaultValues: { ... },
onSubmit: async ({ value }) => { ... },
})
...
<form.Field
name="firstName"
validators={{
onChange: ({ value }) => !value ? 'A first name is required' : undefined,
}}
children={(field) => (
<>
<label htmlFor={field.name}>First Name:</label>
<input
id={field.name}
name={field.name}
value={field.state.value}
onBlur={field.handleBlur}
onChange={(e) => field.handleChange(e.target.value)}
/>
<FieldInfo field={field} />
</>
)}
/>
Завдяки використанню
form.Field
тут є гарна підтримка TypeScript, а також можна пропускати деякі пропси (аналогічно до <Controller control />
у react-hook-form
).Валідація підтримується як для всієї форми (через
useForm
, зокрема зі схемами типу zod
), так і для окремих полів.Що одразу привертає увагу - підхід через children. Полю передається функція, а не JSX-елементи. Команда TanStack у коментарях зазначає, що render-пропси - "great". А що думаєте ви?
👉 Відкрити посилання
#library
👍8❤1🔥1
Radashi ⚙️
Колись ми розповідали про Radash — легку й корисну бібліотеку, яка містила багато зручних методів і могла стати альтернативою Lodash. Вона була оптимізованою для TypeScript мала меншу вагу, що робило її привабливим вибором для багатьох розробників.
Проте з часом підтримку Radash припинили. На щастя, з’явилася її дочірня бібліотека, яка продовжує розвиток проєкту та зберігає ключові переваги попередника. Вона, як і раніше, пропонує безліч утиліт, які можуть стати в пригоді в будь-якому проєкті. Тому, якщо ви шукали сучасну й легку альтернативу Lodash, варто звернути на неї увагу.
👉 Відкрити посилання
#library
Колись ми розповідали про Radash — легку й корисну бібліотеку, яка містила багато зручних методів і могла стати альтернативою Lodash. Вона була оптимізованою для TypeScript мала меншу вагу, що робило її привабливим вибором для багатьох розробників.
Проте з часом підтримку Radash припинили. На щастя, з’явилася її дочірня бібліотека, яка продовжує розвиток проєкту та зберігає ключові переваги попередника. Вона, як і раніше, пропонує безліч утиліт, які можуть стати в пригоді в будь-якому проєкті. Тому, якщо ви шукали сучасну й легку альтернативу Lodash, варто звернути на неї увагу.
👉 Відкрити посилання
#library
👍6❤2