react-bootstrap-table
устарело, вы должны использовать react-bootstrap-table2
Если я правильно понял требования, вы хотите расширить строку, но расширенное содержимое должно отличаться, в зависимости от щелчка столбца / ячейки.
1-й - расширенные строки
На примере 'Expand Management' в качестве основы мы можем увидеть, как управлять расширенными строками, используя массив в состоянии.Это просто, но мы не можем использовать обработчик onExpand
как не зависящий от столбца.Мы можем использовать параметр expanded
:
expanded: this.state.expanded,
Этот массив содержит только расширенные индексы строк.
2-й - в каком столбце щелкнули?
Примеры содержат 'СтолбецСобытие ' - onClick
получает column
необходимый нам параметр.Это событие должно быть определено в columns
, например:
const columns = [{
dataField: 'id',
text: 'Product ID',
events: {
onClick: (e, column, columnIndex, row, rowIndex) => {
console.log(row, column);
const isRowExpanded = this.state.expanded.includes( row );
this.setState( {
column: 'id',
expanded: isRowExpanded ?
this.state.expanded.filter(x => x !== row)
: [...this.state.expanded, row]
});
}
}
}, {
dataField: 'name',
text: 'Product Name',
events: {
onClick: (e, column, columnIndex, row, rowIndex) => {
console.log(row, column);
const isRowExpanded = this.state.expanded.includes( row );
this.setState( {
column: 'name',
expanded: isRowExpanded ?
this.state.expanded.filter(x => x !== row)
: [...this.state.expanded, row]
});
}
}
}, {
dataField: 'price',
text: 'Product Price'
}];
Таким образом, мы обрабатываем обе вещи - расширенную строку и последний нажатый столбец.
3rd - отображать соответствующий компонент
Нам нужна только расширенная параметризация рендерера:
const expandRow = {
renderer: row => {
if (this.state.column==='id') {
return (
<ColumnIDClickedTable someParam={someData[row]} />
)
} else {
return <ColumnNameClickedTable />
}
},
Это должно быть все.Добавление условия только для первых 3-х строк расширяемой является простой задачей.Все развернутые строки изменят содержимое при изменении столбца - сохраняется только последний клик.Сохраните столбец в индексированном массиве, если вам нужно поведение отдельной строки.