1
我正試圖在Github上使用表格排序演示向我的項目添加排序。如何添加排序表反應虛擬化?
我的代碼:
import React from 'react';
import PropTypes from 'prop-types';
import { Table, Column, SortDirection, SortIndicator } from 'react-virtualized';
import AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer';
import 'react-virtualized/styles.css';
class NewTable extends React.Component {
constructor(props) {
super(props);
this.dataList = props.list;
this.state = {
headerHeight: 50,
rowHeight: 25,
rowCount: this.dataList.length,
height: 400,
sortBy: 'columnone',
sortDirection: SortDirection.ASC,
};
this.headerRenderer = this.headerRenderer.bind(this);
this.sort = this.sort.bind(this);
}
isSortEnabled() {
const list = this.dataList;
const rowCount = this.state;
return rowCount <= list.length;
}
sort({ sortBy, sortDirection }) {
this.setState({ sortBy, sortDirection });
}
headerRenderer({
dataKey,
sortBy,
sortDirection,
}) {
return (
<div>
Column One
{sortBy === dataKey &&
<SortIndicator sortDirection={sortDirection} />
}
</div>
);
}
render() {
const {
headerHeight,
height,
rowHeight,
sortBy,
sortDirection,
} = this.state;
const list = this.dataList;
const sortedList = this.isSortEnabled() ?
(list.sortBy(item => item[sortBy]).update(list => sortDirection === SortDirection.DESC ?
list.reverse() : list))
: list;
return (
<AutoSizer disableHeight>
{({ width }) => (
<Table
headerHeight={headerHeight}
height={height}
rowCount={list.length}
rowGetter={({ index }) => sortedList[index]}
rowHeight={rowHeight}
sort={this.sort}
sortBy={sortBy}
sortDirection={sortDirection}
width={width}
>
<Column
dataKey='columnone'
headerRenderer={this.headerRenderer}
disableSort={!this.isSortEnabled}
width={200}
flexGrow={1}
/>
</Table>
)}
</AutoSizer>
);
}
}
export default NewTable;
我的代碼顯示點擊時,ASC和DESC箭頭翻轉向上和向下,但實際排序不會發生。我錯過了什麼?
我真的不明白排序在哪裏發生。我看到了這些功能,但是我看不到輸出的地方。
謝謝!
編輯:數據作爲JSON輸入。
首先,感謝Brian的快速回復,非常感謝。但它仍然沒有工作。我甚至使用了幾乎所有的代碼:https://jsfiddle.net/L69zaLtw/2/,顯示的錯誤:「list.sortBy不是函數」。我在這裏做錯了什麼?謝謝 – AO17
啊,有道理。在我的代碼中,'list'屬性是'Immutable.List',它具有'sortBy'功能。你的情況,如果它是一個數組,你會想使用'Array.prototype.sort'方法:) – brianvaughn