【发布时间】:2019-12-16 15:14:45
【问题描述】:
我正在尝试将条目添加到数组中,这些条目是对应于表格行的对象。选择后,每一行都会用一种颜色突出显示。也可以使用 Ctrl 键选择多行。每次单击时,我都会将该行信息对象推送到数组中。它被定义为一个 SET,当多次单击同一行时,相同的条目被复制。此外,我无法取消选择已选择的选项。我将 react-table 用于数据网格的目的。有人可以帮我吗?非常感谢您的帮助。
沙盒:https://codesandbox.io/s/react-table-row-table-final-hor8j
import * as React from "react";
import ReactTable from "react-table";
export default class DataGrid extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedRows: []
};
}
rowClick = (state, rowInfo) => {
if (rowInfo) {
let selectedRows = new Set();
return {
onClick: e => {
if (e.ctrlKey) {
selectedRows = this.state.selectedRows;
rowInfo._index = rowInfo.index;
selectedRows.push(rowInfo);
this.setState({
selectedRows
});
} else {
selectedRows = [];
rowInfo._index = rowInfo.index;
selectedRows.push(rowInfo);
}
this.setState(
{
selectedRows
},
() => {
console.log("final values", this.state.selectedRows);
this.props.rowClicked(this.state.selectedRows);
}
);
},
style: {
background:
this.state.selectedRows.some(e => e._index === rowInfo.index) &&
"#9bdfff"
}
};
} else {
return "";
}
};
render() {
return (
<ReactTable
data={this.props.data}
columns={this.props.columns}
getTrProps={this.rowClick}
/>
);
}
}
【问题讨论】:
-
Even though its defined as a SET, still it has duplicates when the same row is clicked multiple times这是因为即使对象可能具有相同的属性,它也是对对象的不同引用。如果您执行new Set([{}, {}]),您会看到它的大小为 2。 -
你在这里定义 selectedRows: ` let selectedRows = new Set();` -- 但是你每次使用之前都会替换 selectedRows 的值,
selectedRows = this.state.selectedRows;此外,一个 Set 没有push函数 -
我添加了一个使用
Set的解决方案(这是个好主意),并允许您选择和取消选择多行。 -
啊,明白了,我以为问题更多是关于如何使用
Set。
标签: javascript reactjs ecmascript-6 setstate react-table