constructor(params: Object) {
    this._dataSource = new ListViewDataSource({
      getRowData: params.getRowData,
      getSectionHeaderData: params.getSectionHeaderData,
      rowHasChanged: (row1, row2) => {
        /**
         * Row needs to be re-rendered if its swiped open/close status is
         * changed, or its data blob changed.
         */
        return (
          (row1.id !== this._previousOpenRowID && row2.id === this._openRowID) ||
          (row1.id === this._previousOpenRowID && row2.id !== this._openRowID) ||
          params.rowHasChanged(row1, row2)
        );
      },
      sectionHeaderHasChanged: params.sectionHeaderHasChanged,
    });
  }
Data source wrapper around ListViewDataSource to allow for tracking of
which row is swiped open and close opened row(s) when another row is swiped
open.

See https://github.com/facebook/react-native/pull/5602 for why
ListViewDataSource is not subclassed.