Category Archive AG Grid

Byphunsanit

AG Grid: angular, javascript, react, vue Framework อะไรดี

แม้ว่า AG Grid จะมีฟีเจอร์การทำงานพื้นฐาน (Core Engine) ที่เหมือนกันในทุก Framework แต่ความแตกต่างที่สำคัญคือ “วิธีการเชื่อมต่อ” (Wrapper Implementation) และการจัดการกับ Lifecycle ของแต่ละตัว


การจัดการ DOM และ Performance

  • JavaScript (Vanilla): เป็นการจัดการ DOM โดยตรง (Direct Manipulation) ไม่มี overhead ของ framework ทำให้ประสิทธิภาพดิบ (Raw Performance) สูงที่สุด แต่เขียนยากกว่าเพราะต้องจัดการ State เองทั้งหมด
  • Angular, Vue, React: AG Grid เขียน “Wrapper” ขึ้นมาหุ้มเพื่อให้เราใช้งานแบบ Declarative ได้ (ส่งค่าผ่าน Props/Bindings) โดย AG Grid พยายามใช้ Virtual DOM ของตัวเองเป็นหลักเพื่อรักษาความเร็ว แต่ยังคง Sync กับ Lifecycle ของ Framework นั้น ๆ

Custom Components (Cell Renderers / Editors)

นี่คือจุดที่ต่างกันชัดเจนที่สุดในด้านการเขียนโค้ดครับ

  • Angular: ต้องใช้ Angular Components และต้องระวังเรื่องการจัดการ ViewContainerRef (แต่ AG Grid จัดการความยุ่งยากส่วนใหญ่ให้แล้ว) และรองรับระบบ Dependency Injection (DI) ของ Angular เต็มรูปแบบ
  • JavaScript: คุณต้องเขียนเป็น Class หรือ Function ที่คืนค่าเป็น Plain HTML/String ซึ่งจะลำบากกว่าถ้าต้องการทำ UI ซับซ้อนในช่องตาราง
  • React: คุณสามารถใช้ React Functional Components เป็น Cell Renderer ได้เลย โดย AG Grid จะจัดการเรื่องการ Portal ข้อมูลให้เอง
  • Vue: ใช้ Vue Components (SFC) ได้ตามปกติ รองรับทั้ง Options API และ Composition API

การจัดการข้อมูล (Data Binding)

FeaturePlain JavaScriptReactAngularVue
Data Updateapi.setRowData(data)ผ่าน rowData prop (State)ผ่าน [rowData] bindingผ่าน :rowData binding
Event HandlingonGridReady: (params) => {}onGridReady={onGridReady}(gridReady)="onGridReady($event)"@grid-ready="onGridReady"
TemplateHTML StringsJSX / TSXHTML TemplatesVue Templates

ขนาดของ Bundle Size

  • ถ้าโปรเจกต์คุณเป็น Framework ไหน ให้ใช้ตัวนั้นครับ เพราะ AG Grid ออกแบบมาให้กลมกลืนกับ Ecosystem ของแต่ละตัวอยู่แล้ว
  • หากกังวลเรื่องการย้าย Framework ในอนาคต: ข่าวดีคือ Grid Options (Configuration) เกือบ 90% ของ AG Grid นั้น “เหมือนกันทุก Framework” ครับ ถ้าคุณเขียน Logic การ Sort/Filter/Group ไว้ใน Framework หนึ่ง การย้ายไปอีกตัวหนึ่งจะทำได้เร็วมาก เพราะเปลี่ยนแค่ส่วนที่เป็น UI Wrapper เท่านั้น

อ่านเพิ่มเติม