Зміст
Коротко
У випуску React Status #486 першою новиною стоїть стабільний TanStack Table v9 — понад чотири роки після v8. Кевін Ван Котт (із 2022 він веде бібліотеку замість Таннера Лінслі) перезібрав ядро: можливості реєструють явно й викидають із бандла, якщо ними не користуєтесь; стан живе на TanStack Store; на мільйоні рядків у замірі команди утримана купа падає приблизно з 2,71 ГБ до ~380 МБ. Безголова модель таблиці та сама; ламається спосіб збірки «системи таблиць» у продукті. Поруч у дайджесті — гід Vercel по Next.js 16.3 і черв’як у пакеті keyv; це тло тижня, не тема релізу таблиці.
Що сталося
Офіційний розбір — у блозі TanStack (4 серпня 2026). Бета два місяці тому обіцяла здебільшого внутрішній каркас. За бету каркас встигли наростити, і в стабільному списку сім блоків.
Адаптери: десять фреймворків плюс @tanstack/table-core. Стан на TanStack Store стикується з нативною реактивністю: сигнали, посилання, руни, computed(). React 18+ дружить із компілятором і дає тонкі підписки через атоми, селектори й table.Subscribe. Є Preact, Vue 3.2+, Solid 1.x (Solid 2 обіцяють до v10), Svelte 5, Angular 19+, Lit, Alpine, Ember 5.8+ і Octane.
Пам’ять: спільні прототипи для API рядка, стовпця, комірки й шапки замість копії методів на кожен екземпляр. На мільйоні рядків × 8 стовпців із посторінковою нарізкою утримана купа у звіті — близько 86% менша, ніж у v8. Середній час обробки: ядро моделі рядків −79%, групування −52%, сортування −37%, фільтри −34%.
Стан як і раніше можна вести через state і on[State]Change або віддати шматки зовнішнім атомам. Типи знають, які можливості зареєстровані: API фільтра не існує в типах, доки фільтр не ввімкнули. Можливості збирають через tableFeatures(): таблиця лише з посторінковою нарізкою не тягне фільтри й групування. Повний пакет зріс приблизно з 14 до 25 КБ у стислому вигляді, але середній бандл застосунку має стати меншим. Для продукту загалом — tableOptions() і createTableHook(): спільна фабрика таблиць уже з прив’язаними можливостями й домовленостями щодо комірок.
Із нового: виділення комірок (прямокутники, перетягування, Shift, кілька діапазонів), об’єднання комірок за рядками й стовпцями, кілька агрегацій на стовпець. Тимчасовий міст для React — useLegacyTable з API v8 поверх v9; він застарів, тягне всі можливості й роздуває бандл — лише щоб переїхати. Для екрана лише з посторінковою нарізкою офіційний приклад реєструє rowPaginationFeature і createPaginatedRowModel() — і більше нічого. Це і є обіцянка v9 на практиці: середній бандл застосунку має стати меншим, навіть якщо повний пакет зріс з ~14 до ~25 КБ.
Чому це важливо
Таблиця в продукті рідко одна. Зазвичай це сітка замовлень, сітка логів, сітка адмінки — і у v8 у бандл часто витікало «все, що вміє бібліотека». Явна реєстрація можливостей змінює економіку: новий стовпець із групуванням платить той екран, якому воно потрібне. Зміна мейнтейнера пояснює, чому чекали так довго; архітектура заточена під те, щоб v10 (зведені таблиці, складні вирази фільтрів, Solid 2) не змушувала всіх тягнути дорожню карту цілком.
Для фронтенду це ще й урок модульності: «безголова бібліотека» у 2026 році — не лише «малюй сам», а й «підключай лише ті алгоритми рядків, які реально ганяєте на клієнті». Якщо сітка віртуалізує сотні тисяч рядків, виграш у пам’яті — не мікрооптимізація, а різниця між вкладкою, яка живе, і вкладкою, яку вбиває браузер. Заміри команди якраз про цей край: на маленьких таблицях економія майже непомітна, на мільйоні рядків — уже сотні мегабайтів і гігабайти.
На практиці
- Новий екран одразу пишіть на v9:
useTable+ явнийfeatures, не копіюйтеuseReactTableзі старих гідів. - Для міграції читайте гід свого фреймворку;
useLegacyTable— короткий міст, не цільове API. - Реєструйте лише потрібне: посторінкова нарізка на клієнті —
rowPaginationFeatureіcreatePaginatedRowModel(), без «про всяк випадок» фільтрів. - Підписки малюйте через
table.Subscribe/ селектори, а не через перемальовування всієї сітки на будь-яку зміну стану. - Якщо таблиць у продукті багато, винесіть спільний
createTableHook()зі значеннями за замовчуванням, сортуваннями й комірками — окремі екрани залишаться короткими. - Перевірте великі клієнтські набори (сотні тисяч рядків із віртуалізацією): виграш у пам’яті — головний практичний аргумент міняти мажор.
- Тло дайджесту: гід
Vercelщодо ефективностіNext.js16.3 варто пробігти окремо; пакетkeyvі черв’як ланцюжком npm — привід перевірити файл блокувань залежностей, це не частина релізу таблиці.
Підсумок
TanStack Table v9 — фундамент, а не набір «ще кнопок у шапці». Платите за ввімкнені можливості, менше пам’яті на величезних клієнтських сітках, реактивність, близька до фреймворку, десять адаптерів. Переїзд ламає хуки й реєстрацію модулів — зате далі бібліотека може рости, не роздуваючи кожну таблицю в застосунку.


