{"id":2833,"date":"2025-07-03T08:39:22","date_gmt":"2025-07-03T08:39:22","guid":{"rendered":"https:\/\/www.infragistics.com\/blogs\/?p=2833"},"modified":"2025-09-04T12:08:51","modified_gmt":"2025-09-04T12:08:51","slug":"react-grid-features","status":"publish","type":"post","link":"https:\/\/www.infragistics.com\/blogs\/react-grid-features","title":{"rendered":"Top 5 React Grid Features for Better UX &amp; Performance"},"content":{"rendered":"\n<p>React is one of the most used web frameworks among developers worldwide for building applications. To date, over 1.3 million websites utilize it, while the number of teams and React programmers leveraging the technology continues to grow exponentially every day. The reason is:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Its component-based architecture<\/li>\n\n\n\n<li>Flexibility<\/li>\n\n\n\n<li>And a rich ecosystem of libraries<\/li>\n<\/ul>\n\n\n\n<p>All of this makes building interactive user interfaces fast and efficient. <strong>One essential UI component that developers often need is the <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/data-grid\">React data grid<\/a><\/strong>, which is a robust table-like structure for displaying and manipulating data. To create the best apps with comprehensive grids, however, developers require comprehensive data grid features. But what are the top 5 React Grid features to look for in your React library?<\/p>\n\n\n\n<p>This article will examine <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\">Ignite UI for React<\/a> Grid and provide a list of the best React features and their corresponding use cases. So, here\u2019s the functionality you need.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"advanced-filtering-for-complex-filter-conditions\">Advanced Filtering \u2013 For Complex Filter Conditions<\/h2>\n\n\n\n<p>We listed <span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/grid\/advanced-filtering\" target=\"_blank\">Ignite UI for React Advanced Filtering<\/a>&nbsp;among the best React table features because it provides the ability to create complex filtering queries with different conditions comb<\/span>ined using and\/or operands.<\/p>\n\n\n\n<p>Once you have created the filtering conditions and groups, all you need to do to filter the data is click the&nbsp;Apply&nbsp;button. If you have modified the advanced filter but don&#8217;t want to preserve the changes, click the&nbsp;Cancel&nbsp;button. You could also clear the advanced filter by clicking the&nbsp;Clear Filter&nbsp;button.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Finding all sales above a certain value that happened in a defined time period.<\/li>\n\n\n\n<li>A panel that lets users find stocks of a particular product at a specific location.<\/li>\n\n\n\n<li>A Financial dashboard that filters a large number of transactions.<\/li>\n<\/ul>\n\n\n\n<p>Here is a short video on how you can filter all dates past a certain point meeting a specific criteria.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/static.infragistics.com\/marketing\/Website\/blog\/react-grid-features\/AdvFiltering.gif\" alt=\"Advanced Filtering among the best React Grid Features\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to Enable Advanced Filtering?<\/h3>\n\n\n\n<p>If you need Advanced Filtering as one of your React Grid features and want to enable it, the&nbsp;<a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/api\/docs\/typescript\/latest\/classes\/igniteui_react_grids.igrgridbasedirective.html#allowAdvancedFiltering\">allowAdvancedFiltering<\/a>&nbsp;input property should be set to&nbsp;true.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;IgrGrid data={nwindData} autoGenerate={false} ref={gridRef} allowAdvancedFiltering={true}>\n\n\u00a0\u00a0\u00a0 &lt;IgrGridToolbar>&lt;\/IgrGridToolbar>\n\n&lt;\/IgrGrid><\/pre>\n\n\n\n<p>The advanced filtering generates a&nbsp;<a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/api\/docs\/typescript\/latest\/classes\/igniteui_react_grids.igrgridbasedirective.html#filteringExpressionsTree\">filteringExpressionsTree<\/a>,&nbsp;which is stored in the&nbsp;<a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/api\/docs\/typescript\/latest\/classes\/igniteui_react_grids.igrgridbasedirective.html#advancedFilteringExpressionsTree\">advancedFilteringExpressionsTree<\/a>&nbsp;input property. You could use the&nbsp;<a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/api\/docs\/typescript\/latest\/classes\/igniteui_react_grids.igrgridbasedirective.html#advancedFilteringExpressionsTree\">advancedFilteringExpressionsTree<\/a>&nbsp;property to set an initial state of the advanced filtering.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const filteringTree: IgrFilteringExpressionsTree = {\n\n\u00a0\u00a0\u00a0 operator: FilteringLogic.And,\n\n\u00a0\u00a0\u00a0 filteringOperands: [\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fieldName: \"ProductID\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 condition: new IgrNumberFilteringOperand().condition(\"doesNotEqual\"),\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 searchVal: 1,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ignoreCase: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fieldName: \"ProductName\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 conditionName: \"startsWith\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 searchVal: \"Ch\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ignoreCase: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\n\u00a0\u00a0\u00a0 ]\n\n};\n\n&lt;IgrGrid data={data} allowFiltering={true} advancedFilteringExpressionsTree={filteringTree}>\n\n\u00a0\u00a0\u00a0 &lt;IgrGridToolbar>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;IgrGridToolbarActions>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;IgrGridToolbarAdvancedFiltering>&lt;\/IgrGridToolbarAdvancedFiltering>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/IgrGridToolbarActions>\n\n\u00a0\u00a0\u00a0 &lt;\/IgrGridToolbar>\n\n\u00a0\u00a0\u00a0 &lt;IgrColumn field=\"ProductID\" filterable={true} dataType=\"number\">&lt;\/IgrColumn>\n\n\u00a0\u00a0\u00a0 &lt;IgrColumn field=\"ProductName\" dataType=\"string\" filterable={true}>&lt;\/IgrColumn><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">State Persistence \u2013 Save &amp; Restore Grid Views<\/h3>\n\n\n\n<p>Do you want to save and restore the grid state in a simple manner? Use the <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/grid\/state-persistence\">State Persistence feature<\/a> in Ignite UI for React Grid. Any change you apply will be saved and restored after the page is reloaded. When the IgrGridState is applied to the React IgrGrid, it exposes the GetState, GetStateAsString, ApplyState, and ApplyStateFromString methods. This helps you achieve state persistence in any scenario. It\u2019s among the top 5 React Grid features because it\u2019s ideal for apps where users require consistency and customization in terms of how data is presented.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For grid layouts that require customizations by sorting, resizing columns, applying filters, and settings that can be saved automatically.<\/li>\n\n\n\n<li>A task management app where users want their filtered, customized task view to remain the same after logging in again.<\/li>\n\n\n\n<li>A finance team reporting dashboard that allows users to save specific column configurations of expense records or a defined budget.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/static.infragistics.com\/marketing\/Website\/blog\/react-grid-features\/StatePersistance.gif\" alt=\"State Persistence sample in React\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to Enable State Persistence?<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;IgrGrid>\n\n\u00a0\u00a0\u00a0 &lt;IgrGridState ref={gridStateRef}>&lt;\/IgrGridState>\n\n&lt;\/IgrGrid>\n\n\/\/ get an `IgrGridStateInfo` object, containing all features original state objects, as returned by the grid public API\n\nconst state: IgrGridStateInfo = gridStateRef.current.getState([]);\n\n\/\/ get all features` state in a serialized JSON string\n\nconst stateString: string = gridStateRef.current.getStateAsString([]);\n\n\/\/ get the sorting and filtering expressions\n\nconst sortingFilteringStates: IgrGridStateInfo = gridStateRef.current.getState(['sorting', 'filtering']);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Keyboard Navigation \u2013 Shortcuts for Improved Productivity &amp; Accessibility<\/h3>\n\n\n\n<p>When it comes to data-heavy React apps, Keyboard Navigation is among the most efficient React grid features because it allows for faster data entry and editing, and is also used for interacting with other grid features.<\/p>\n\n\n\n<p>The React <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/grid\/keyboard-navigation\">Keyboard Navigation feature<\/a> provides a rich variety of keyboard interactions for users, including sorting and grouping options. It enhances the accessibility of the&nbsp;Grid&nbsp;and allows for seamless navigation through any type of elements inside (cell, row, column header, toolbar, footer, etc.). In Ignite UI for React Grid, this functionality is enabled by default, and you can override any of the default behaviors in an easy way.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/static.infragistics.com\/marketing\/Website\/blog\/react-grid-features\/KeyNav.gif\" alt=\"React grid features and keyboard nav\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For a customer support CRM where users need to process tickets fast.<\/li>\n\n\n\n<li>An accessibility-focused app used by screen reader users who rely on keyboard commands to navigate grid content.<\/li>\n\n\n\n<li>A spreadsheet-style finance tool where large volumes of data can be added using only the keyboard.<\/li>\n<\/ul>\n\n\n\n<p>Furthermore, users can override much of the navigation functionality by utilizing the built-in events, allowing them to tailor the experience more closely to their app\u2019s needs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How to Customize Keyboard Navigation?<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;IgrGrid id=\"grid1\" primaryKey=\"ProductID\" onGridKeydown={customKeydown}>\n\n&lt;\/IgrGrid>\n\nconst customKeydown = (eventArgs: IgrGridKeydownEventArgs) => {\n\n\u00a0 const args = eventArgs.detail;\n\n\u00a0 const target= args.target;\n\n\u00a0 const evt = args.event;\n\n\u00a0 const type = args.targetType;\n\n\u00a0 if (type === 'dataCell' &amp;&amp; target.editMode &amp;&amp; evt.key.toLowerCase() === 'tab') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 1. USER INPUT VALIDATION ON TAB\n\n\u00a0 }\n\n\u00a0 if (type === 'dataCell' &amp;&amp; evt.key.toLowerCase() === 'enter') {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ 2. CUSTOM NAVIGATION ON ENTER KEY PRESS\n\n\u00a0 }\n\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"export-to-excel-sharing-analyzing-data\">Export to Excel \u2013 Sharing &amp; Analyzing Data<\/h2>\n\n\n\n<p>The <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/grid\/export-excel\">Export to Excel feature<\/a> in React Grid lets you quickly export grid data directly to Excel. This format enables React features such as filtering, sorting, and sharing data outside the app. When using Ignite UI for React, the data export functionality is encapsulated in the&nbsp;ExcelExporterService&nbsp;class, and the data is exported in MS Excel table format. If you want to do this, you will have to invoke the&nbsp;Export&nbsp;method of&nbsp;ExcelExporterService&nbsp;and pass the&nbsp;IgrGrid&nbsp;component as the first argument to export the grid easily.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/static.infragistics.com\/marketing\/Website\/blog\/react-grid-features\/ExportCombined.gif\" alt=\"Export to Excel among the top React Grid Features\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sharing task progress across the team or stakeholders in a single click, preserving all filters.<\/li>\n\n\n\n<li>Preparing a report for a team meeting.<\/li>\n\n\n\n<li>For a sales dashboard where a manager exports filtered sales data.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to Export Grid with Frozen Column Headers?<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function exportEventFreezeHeaders(args: IgrExporterEventArgs) {\n\n\u00a0\u00a0\u00a0 args.detail.options.freezeHeaders = true;\n\n\u00a0 }\n\n&lt;IgrGridToolbar>\n\n\u00a0 &lt;IgrGridToolbarActions>\n\n\u00a0\u00a0\u00a0 &lt;IgrGridToolbarExporter onExportStarted={exportEventFreezeHeaders}>&lt;\/IgrGridToolbarExporter>\n\n\u00a0 &lt;\/IgrGridToolbarActions>\n\n&lt;\/IgrGridToolbar><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"pivot-grid-simplifying-complex-analysis\">Pivot Grid \u2013 Simplifying Complex Analysis<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"779\" height=\"395\" src=\"https:\/\/www.infragistics.com\/blogs\/wp-content\/uploads\/2025\/07\/image-9.png\" alt=\"React Pivot Grid\" class=\"wp-image-2843\" srcset=\"https:\/\/www.infragistics.com\/blogs\/wp-content\/uploads\/2025\/07\/image-9.png 779w, https:\/\/www.infragistics.com\/blogs\/wp-content\/uploads\/2025\/07\/image-9-300x152.png 300w, https:\/\/www.infragistics.com\/blogs\/wp-content\/uploads\/2025\/07\/image-9-768x389.png 768w, https:\/\/www.infragistics.com\/blogs\/wp-content\/uploads\/2025\/07\/image-9-480x243.png 480w\" sizes=\"auto, (max-width: 779px) 100vw, 779px\" \/><\/figure>\n\n\n\n<p>Using Ignite UI for <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/pivot-grid\/overview\">React Pivot Grid<\/a> enables you to present data in a pivot table, allowing users to perform complex analysis on the supplied dataset. It\u2019s not exactly a feature, but a full component that we built to empower users to organize, summarize, and filter large data volumes, which can be later displayed in a cross-table format. There are key React grid features like row dimensions, column dimensions, aggregations, and filters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Use Cases<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For a <a href=\"https:\/\/www.revealbi.io\/blog\/accelerating-digital-transformation-with-embedded-bi-low-code\" rel=\"noopener\">Reveal-style tool<\/a>, or custom data dashboards for data analysts who require slicing and dicing data directly in the app, without having to export to another tool or write SQL queries.<\/li>\n\n\n\n<li>A hospital admin dashboard that can configure and display data in a multi-dimensional pivot table structure, analyzing patient records.<\/li>\n\n\n\n<li>A retail inventory app that pivots stock levels by category, location, etc.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to Enable Pivot Grid?<\/h3>\n\n\n\n<p>Here\u2019s a basic pivot configuration.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const pivotConfiguration1: IgrPivotConfiguration = {\n\n\u00a0\u00a0\u00a0 columns: [\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 new IgrPivotDateDimension({\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enabled: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 memberName: \"Date\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 })\n\n\u00a0\u00a0\u00a0 ],\n\n\u00a0\u00a0\u00a0 rows: [\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enabled: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 memberName: \"SellerCity\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 },\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enabled: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 memberName: \"ProductName\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\n\u00a0\u00a0\u00a0 ],\n\n\u00a0\u00a0\u00a0 filters: [\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enabled: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 memberName: \"SellerName\"\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\n\u00a0\u00a0\u00a0 ],\n\n\u00a0\u00a0\u00a0 values: [\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 member: \"ProductUnitPrice\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 displayName: \"Amount of Sale\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dataType: \"currency\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 enabled: true,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 aggregate: {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 aggregatorName: \"SUM\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 key: \"SUM\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 label: \"Sum of Sale\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\n\n\u00a0\u00a0\u00a0 ]\n\n};<\/pre>\n\n\n\n<p>This configuration defines 1 row, 1 column, and 1 aggregation that sums the values of each dimension groups. The members match fields available in the provided data source:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public data = [\n[\n\u00a0\u00a0\u00a0 {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProductName: `Clothing`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ProductUnitPrice: 12.8,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SellerName: `Stanley Brooker`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SellerCity: `Seattle`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Date: `2007-01-01T00:00:00`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Value: 94.4,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NumberOfUnits: 282\n\u00a0\u00a0\u00a0 },\n\n];<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"wrap-up\">Wrap Up<\/h2>\n\n\n\n<p>When selecting a <a href=\"https:\/\/www.infragistics.com\/products\/ignite-ui-react\/react\/components\/grids\/data-grid\">React data grid<\/a>, in addition to performance and price, you should also consider how real users will interact with it and what features you will need to match app requirements and users\u2019 expectations. Features like Advanced Filtering, State Persistence, Keyboard Navigation, and Export to Excel aren&#8217;t just a necessity.<\/p>\n\n\n\n<p>They ensure better developer productivity, enhanced user experience, customizability, and scalable data management in various scenarios for both simple and complex applications. And when paired with the capabilities of Pivot Grid, all of these empower you to future-proof your apps and maintain clean code so your React projects can evolve with ease.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When selecting a React data grid, in addition to performance and price, you should also consider how real users will interact with it and what features you will need to match app requirements and users\u2019 expectations. Features like Advanced Filtering, State Persistence, Keyboard Navigation, and Export to Excel aren&#8217;t just a necessity.<\/p>\n","protected":false},"author":21,"featured_media":2853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[20,43,25,52,51],"class_list":["post-2833","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-react","tag-ignite-ui","tag-ignite-ui-for-react","tag-react","tag-react-grid","tag-react-grid-features"],"_links":{"self":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/2833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/comments?post=2833"}],"version-history":[{"count":16,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/2833\/revisions"}],"predecessor-version":[{"id":3072,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/2833\/revisions\/3072"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media\/2853"}],"wp:attachment":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media?parent=2833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/categories?post=2833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/tags?post=2833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}