1.3Kпросмотров
79.0%от подписчиков
8 марта 2026 г.
Score: 1.5K
👩💻 Я перешел с @tanstack/vue-query на @pinia/colada И пока что я доволен. На последней трансляции я озвучил про этот план — почитать про @pinia/colada, и подумать на тему того, чтобы на неё перейти. Я почитал. Не скажу, что так же, как документацию по Vue, которую буквально обшерстил, но достаточно, чтобы попробовать технологию в деле. Переписывать код пришлось от силы минут 15, а всё потому, что API @pinia/colada очень сильно похож на @tanstack/vue-query за исключением некоторых мелочей. Изначально идея переключиться на другую технологию возникла из-за желания держать используемые зависимости из одной экосистемы. Я уже использую обычный pinia, поэтому был заинтересован в том, чтобы взять тоже что-то от их авторов. Как ни странно, у @pinia/colada уже есть написанная интеграция с Nuxt, поэтому тут беспокойств не было. Вместе с этим, читая документацию по @tanstack/vue-query, я постоянно напарывался на примеры на React, что оказалось не очень приятным. Последним аргументом было то, что colada заточена под Vue, что мне симпатизировало. Давайте кратко опишу ту разницу, которую заметил. Первое, и скорее всего единственное, что бросается в глаза на данный момент, это то, что ключевые поля в composable-ах, которыми ты пользуешься постоянно, не зависят друг от друга. Вот пример кода на tanstack:
const userId = ref(123); useQuery({ queryKey: [userId], queryFn({ queryKey }) { return getUser(queryKey[0]); }
}) В данном случае, queryFn обладает информацией о том, каким был ключ, причем важно отметить, что типизация queryKey сохраняется, и в функции queryFn мы знаем, что queryKey = [number]. Теперь это же намерение через pinia:
const userId = ref(123); useQuery({ key: () => [userId.value], query() { return getUser(userId.value); }
}) Заметили? key никак не связан с query, и сделано это скорее всего намеренно. Да, вы можете внутри query получить текущий key, но в контексте типизации он никак не будет зависеть от того, что указали в key. В целом, меня этот подход устраивает, хоть и может в каких-то случаях вызывать боль. Для предотвращения вызовов, в tanstack есть специальное значение — skipToken. Вы должны вернуть его из функции queryFn, и тогда TS не будет ругаться. Лично для меня это выглядит как какой-то костыль. В pinia я аналогов не нашел, поэтому просто пользуюсь выделенной опцией enabled (в tanstack таковая тоже имеется). Но опять же, помним — enabled, key и query, никак типами не связаны, а это может приводить к багам. С этим придется жить. Вот такая вот история. Буду обкатывать, может чем еще поделюсь. Спокойной ночи 👋