TanStack Table نسخهٔ ۹ به بتا رسید؛ بازنویسی بزرگ مدیریت state
خلاصهٔ کاملتر
به گفتهٔ Kevin Van Cott، نگهدارندهٔ اصلی پروژه، بالاخره TanStack Table V9 به بتا رسید؛ نسخهای که به قول خودش شاید بیشازحد طول کشیده. تو یه جمعبندی کوتاه، V9 بهبودهای بزرگ تو مدیریت state داره، tree-shakableتر و توسعهپذیرتره، حافظهٔ کمتری مصرف میکنه، devtools بهتری داره و با آخرین نسخههای React، Preact، Solid، Vue، Angular، Svelte و Lit هماهنگ شده.
نویسنده مفصل دربارهٔ مشکلات V8 حرف میزنه؛ نسخهای که چهار ساله بیرون اومده و موفق بوده ولی چند ایراد بنیادی داشت: سیستم مدیریت stateش الگوهای رسمی React رو دنبال نمیکرد و با پایدار شدن React Compiler شروع به شکستن کرد، کنترل کافی روی re-render و memoization نبود، جدولهای مجازیسازیشدهٔ بزرگ حافظهٔ زیادی میخوردن، توسعهٔ کتابخونه با کد سفارشی سخت بود و devtoolsش هم ضعیف بود.
نکتهٔ جالب اینه که نویسنده صادقانه اعتراف میکنه یه اشتباه بزرگ کرده: تلاش کرده همهٔ این مشکلات رو یکجا حل کنه، درحالیکه بهتر بود هربار یکی-دو تاشون رو جدا و سریعتر میرسوند. اون تعریف میکنه که از اواخر ۲۰۲۳ درگیر ایدهٔ tree-shakable کردن دوبارهٔ Table (شبیه react-table v7) شده و همین یه سال روش کار برده، تا اینکه با پایدار شدن React Compiler، مشکل مدیریت state به اولویت اصلی و اجتنابناپذیر تبدیل شد.
راهحل از سمت TanStack Form رسید. به گفتهٔ نویسنده، کاری که Corbin Crutchley روی Form انجام داده بود دقیقاً همون چیزی بود که Table لازم داشت: یه store بهسبک signal با atom slice، state مشتقشده، اشتراکهای مبتنی بر selector و یه منبع حقیقت واحد که همهٔ adapterها بتونن ازش بخونن و بنویسن. تیم عملاً همون رویکرد رو برای Table اقتباس کرد.
مهمترین تازههای V9 هم همین حولوحوش میچرخن. اول، مدیریت state حالا زیر پوسته از TanStack Store استفاده میکنه (هرچند سینتکس قدیمی V8 هم هنوز کار میکنه). دوم، با state selectorها میتونی دقیق کنترل کنی که هر بخش از درخت React کِی re-render شه؛ مثلاً تغییر انتخاب یه ردیف دیگه لازم نیست کنترلهای صفحهبندی و فیلترها رو هم re-render کنه. نویسنده میگه شباهت table.Subscribe و form.Subscribe تصادفی نیست.
سوم، مصرف حافظه برای جدولهای مجازیسازیشدهٔ بزرگ کم شده. با کاری که ابتدا تو یه PR روی V8 شروع شد و بعد به V9 پورت و گسترش داده شد، APIهای ویژگیها تا حد ممکن روی prototypeهای مشترک گذاشته میشن بهجای اینکه برای هر ردیف و سلول از نو ساخته شن، و همین تخصیص حافظه رو کم میکنه.
نکات کلیدی:
- انتشار بتای TanStack Table V9 بعد از یه پروژهٔ چندساله
- بازنویسی مدیریت state بر پایهٔ TanStack Store، الهامگرفته از TanStack Form
- کنترل دقیق re-render با state selectorها برای جلوگیری از رندرهای غیرضروری
- کاهش مصرف حافظه در جدولهای مجازیسازیشدهٔ بزرگ با استفاده از prototypeهای مشترک
- اعتراف صادقانهٔ نویسنده به اینکه حل همزمان همهٔ مشکلات V8 توسعه رو بیشازحد طولانی کرده




