Skip to content

Modus-Logo-Long-BlackCreated with Sketch.

  • Services
  • Work
  • Blog
  • Resources

    OUR RESOURCES

    Innovation Podcast

    Explore transformative innovation with industry leaders.

    Guides & Playbooks

    Implement leading digital innovation with our strategic guides.

    Practical guide to building an effective AI strategy
  • Who we are

    Our story

    Learn about our values, vision, and commitment to client success.

    Open Source

    Discover how we contribute to and benefit from the global open source ecosystem.

    Careers

    Join our dynamic team and shape the future of digital transformation.

    How we built our unique culture
  • Let's talk
  • EN
  • FR

Ext JS to React: Selection Model

Published on February 15, 2018
Last Updated on April 23, 2021
Application Development

This is part of the Ext JS to React blog series. You can review the code from this article on the Ext JS to React Git repo.

In the previous article, Basic Grid, we saw how to create a lightweight grid view. In it, we enabled row sorting by clicking on the grid header and all without using any pre-built UI library. In this article we are going to add more user interaction with row and checkbox selection using the ag-Grid library. ag-Grid is by no means the only pre-built option available in the React ecosystem. However, it does have many of the capabilities found in the Ext JS Grid including grid selection. The licensing options include a free version in addition to a paid, more fully-featured enterprise version.

Note: While not a requirement for React, this article’s code examples assume you’re starting with a starter app generated by create-react-app.

ag-Grid setup

First, we’ll install ag-Grid including the files we’ll use to theme the grid:

npm install --save ag-grid
npm install --save ag-grid-react

If you’re using React 16+ you may also need to install react-dom-factories:

npm install --save react-dom-factories

We will be reusing the same data file that we introduced in the previous article, Basic Grid.

Single Row Selection Model

The default selection model in Ext JS is row selection. To enable row selection with ag-Grid, we can pass rowSelection prop. Ag-Grid is configurable by passing configuration objects for the columns as well as the data. In the following example, we’ll also import the material theme CSS installed with ag-Grid:

import React, { Component } from 'react';
import { AgGridReact } from 'ag-grid-react';
import getData from './data';
import 'ag-grid/dist/styles/ag-grid.css';
import 'ag-grid/dist/styles/ag-theme-material.css';

const { data } = getData();

class App extends Component {
  columns = [
    {
      headerName: 'Name',
      field: 'name'
    },
    {
      headerName: 'Company',
      field: 'company'
    },
    {
      headerName: 'Email',
      field: 'email'
    }
  ]
  render () {
    return (
      <div className="ag-theme-material">
        <AgGridReact
          containerStyle={{height: '400px'}}
          columnDefs={this.columns}
          rowData={data}
          rowSelection="single"
        />
      </div>
    );
  }
}

export default App;

We are now using a pre-built grid and our application code is much smaller since we don’t have to worry about the underlying DOM nodes. We simply instantiate the ag-Grid with columns and data and it takes care of the rest for us just like Ext JS did. ag-Grid ships with default themes. As a result, the AgGridReact component is nested within a div where we can specify the theme we want to use.

<div className="ag-theme-material">

With the rowSelection="single" config, rows are now selectable, but only one-at-a-time. Meaning, if you click on one row, it’ll select it. Clicking on another row will deselect the previous row and select the new row. Rows can be deselected by setting true on the rowDeselection prop. All grid configuration options can be found here on the ag-Grid Grid Properties page.

Ext JS to React: Selection Model, Single Selection

Multiple Row Selection Model

ag-Grid made it easy to enable row selection and it’s just as easy to enable multiple-row selection. To enable this, we can set the rowSelection prop to “multiple”:

import React, { Component } from 'react';
import { AgGridReact } from 'ag-grid-react';
import getData from './data';
import 'ag-grid/dist/styles/ag-grid.css';
import 'ag-grid/dist/styles/ag-theme-material.css';

const { data } = getData();

class App extends Component {
  columns = [
    {
      headerName: 'Name',
      field: 'name'
    },
    {
      headerName: 'Company',
      field: 'company'
    },
    {
      headerName: 'Email',
      field: 'email'
    }
  ]
  render () {
    return (
      <div className="ag-theme-material">
        <AgGridReact
          containerStyle={{height: '400px'}}
          columnDefs={this.columns}
          rowData={data}
          rowSelection="multiple"
        />
      </div>
    );
  }
}

export default App;
Ext JS to React: Selection Model, Multiple Selections

Like with single mode, as you click rows it will only select the clicked row. To add multiple rows to the selection, you need to use either SHIFT or CTRL (command on macOS) keys as you click on rows to add to the currently selected row(s). The difference between using SHIFT and CTRL is that SHIFT will select all the rows between the last selected row and the row being clicked next. With CTRL, it will only add the clicked row to the existing selection.

Checkbox Selection Model

The checkbox selection model is like the row selection model allowing multiple selections except it uses a column to house checkboxes allowing one or more rows to be selected. Like ag-Grid’s other selection models, it’s easy to configure the grid to use checkboxes for selection:

import React, { Component } from 'react';
import { AgGridReact } from 'ag-grid-react';
import getData from './data';
import 'ag-grid/dist/styles/ag-grid.css';
import 'ag-grid/dist/styles/ag-theme-material.css';

const { data } = getData();

class App extends Component {
  columns = [
    {
      checkboxSelection: true,
      headerCheckboxSelection: true,
      width: 50
    },
    {
      headerName: 'Name',
      field: 'name'
    },
    {
      headerName: 'Company',
      field: 'company'
    },
    {
      headerName: 'Email',
      field: 'email'
    }
  ]
  render () {
    return (
      <div className="ag-theme-material">
        <AgGridReact
          containerStyle={{height: '400px'}}
          columnDefs={this.columns}
          rowData={data}
          rowSelection="multiple"
          suppressRowClickSelection={true}
        />
      </div>
    );
  }
}

export default App;

The first thing you likely noticed is that we added a new column. We do this to tell ag-Grid to render the checkbox in that column by using the checkboxSelection config. Technically, you can set this config on any (and all) columns without creating a dedicated checkbox column, but having the checkbox visually in its own column maintains better separation between checkboxes and cell content. The headerCheckboxSelection prop is also set so that a checkbox is rendered into the column header. The header checkbox enables the selection of all the rows with a single click.

There is another prop on the grid, suppressRowClickSelection, that is set to true. This disallows row selection when clicking on the row element. Having it set to true matches default functionality of Ext JS’s checkbox selection model. It’s an optional configuration, so you can control row selection by clicking the checkbox or the row element.

Ext JS to React: Selection Model, Checkbox Selection

Conclusion

The grid selection methods furnished by ag-Grid take us a long way to being able to coordinate selected grid data with the rest of our application. There are times where, as a developer, you’ll want to be 100% hands-on with the component code. The grid can be a complex animal so it’s nice when there’s a competent pre-built solution available that meets the needs of our use case without loads of original code and testing. In our next blog article we’ll look at even more features of the Ext JS grid in React code!

Posted in Application Development
Share this

Seth Lemmons

Seth Lemmons is a Senior Front End Engineer at Modus Create. Seth has devoted several years to learning Ext JS. He has spent the last 10 years building and supporting web applications with an eye for excellent user experience. Outside of work and a young family Seth has very little free time to just do what he wants. But, if he did have some extra time he'd kinda be into learning vector illustration. And someday he hopes to play video games again.
Follow

Related Posts

  • React Landing
    Ext JS to React: Migration to Open Source

    Worried about Migrating from Ext JS? Modus has the Answers Idera’s acquisition of Sencha has…

  • Ext JS to React: FAQ
    Ext JS to React: FAQ

    This is part of the Ext JS to React blog series. React is Facebook's breakout…

Want more insights to fuel your innovation efforts?

Sign up to receive our monthly newsletter and exclusive content about digital transformation and product development.

What we do

Our services
AI and data
Product development
Design and UX
IT modernization
Platform and MLOps
Developer experience
Security

Our partners
Atlassian
AWS
GitHub
Other partners

Who we are

Our story
Careers
Open source

Our work

Our case studies

Our resources

Blog
Innovation podcast
Guides & playbooks

Connect with us

Get monthly insights on AI adoption

© 2025 Modus Create, LLC

Privacy PolicySitemap
Scroll To Top
  • Services
  • Work
  • Blog
  • Resources
    • Innovation Podcast
    • Guides & Playbooks
  • Who we are
    • Our story
    • Careers
  • Let’s talk
  • EN
  • FR